Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL] Błędne wyniki przy dużej ilości select
pks
post
Post #1





Grupa: Zablokowani
Postów: 16
Pomógł: 0
Dołączył: 20.03.2009

Ostrzeżenie: (0%)
-----


Witam!
Posiadam sobie formularz z 3 polami, w ktorych mozna wpisywać dane. Po wciśnięciu SUBMIT funkcja sprawdza czy te pola o takich danych nie istnieją już w bazie, a jak nie, to je dodaje. Wszystko działa pięknie i ładnie, ale ostatnio zrobiłem sobie funkcję masowego dodawania danych do tych 3 pól z pliku.
Działa ona w oczywisty sposób rozbijania każdej linijki tego pliku na osobne dane i przekazywania ich do funkcji. I tu się pojawia problem, przy np. 500 linijkach w pliku oczywiście dane się dodają, ale funkcja nie sprawdza mi czy już istniały wcześniej w bazie i przez to mam duplikaty niektórych danych.

Dlaczego tak się dzieje? Czy przy dużej ilości zapytań SELECT funkcja pomija niektóre z nich? (istnienie danych w bazie równiez sprawdzam SELECTem)

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




oczywiscie, przy wiecej niz 499 rekordach mysql szaleje.... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a na powaznie: masz zly kod i tyle - pokaz go, to ci pomozemy go naprawic
Go to the top of the page
+Quote Post
pks
post
Post #3





Grupa: Zablokowani
Postów: 16
Pomógł: 0
Dołączył: 20.03.2009

Ostrzeżenie: (0%)
-----


(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
oto funkcja dodająca te dane, $fields to nazwy poszczegolnych pol, $data to tablica z danymi, a mltab to tablica z zaznaczonymi listami subskrypcji.
Wszystko dziala git, ale jak wywołam tą funkcje duuuuzo razy to wariuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Kod
public function addSub($fields, $data, $mltab = NULL) {
         if($data['email'] && $data['nick'] && $data['phone'])
             $ex = (dbfieldexists(TABLE_SUBS, 'email', $data['email']) || dbfieldexists(TABLE_SUBS, 'phone', $data['phone']));
         else if($data['email'] && $data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'email', $data['email']);
         else if($data['phone'] && $data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'phone', $data['phone']);
         else if($data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'nick', $data['nick']);
        
         try {
             if($ex == false) {
                     dbinsert(TABLE_SUBS, $fields, $data);
                    
                     $result = dbselect(TABLE_SUBS, array('id'), NULL, 'id desc', '0, 1');                        
    
                     if($mltab)
                         foreach($mltab as $lis)
                             dbinsert(TABLE_ML_SUBS, array('ml_id', 'sub_id'), array($lis, $result[0]['id']));
                    
                     set_message('Pomyślnie dodano subskrybenta!');
             }
             else throw new Exception('Nie dodano niektórego(-ych) użytkowników, gdyż dane się powtarzają');    
             return true;
         } catch(Exception $e) {
             //
             return false;
         }
     }


a tutaj funkcja sprawdzająca czy pole istnieje w bazie:
Kod
public static function fieldExists($table, $field, $value) {
         try {
             $result = dbselect($table, array($field), "`$field` = '$value'");
             if($result[0][$field]) return true;
             else return false;
         } catch(Exception $e) {
             //
             return false;
         }
     }


pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował pks 31.03.2009, 16:53:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:08