Mateusz Bacławski 0 Zgłoś post Napisano Sierpień 24, 2012 (edytowany) Witam, czy ktoś potrafi to zoptymalizować? $em = mysql_query("SELECT * FROM emails GROUP BY email"); while($r = mysql_fetch_array($em)) { $email = $r['email']; $lang = $r['lang']; $phone = $r['phone']; $bw = $r['bw']; $find = mysql_query("SELECT * FROM emails_all WHERE email='$email'"); if(($f = mysql_fetch_array($find))) { $lang1 = $f['lang']; $phone1 = $f['phone']; $bw1 = $r['bw']; if($lang == "" || $phone == "" || $bw == "") { mysql_query("UPDATE INTO emails_all (id, email, lang, phone, bw) VALUES (null, '$email', '$lang', '$phone', '$wb')"); } break; } else { mysql_query("INSERT INTO emails_all(id, email, lang, phone, bw) VALUES (null, '$email', '$wb', '$phone', '$phone')"); } } Edytowano Sierpień 24, 2012 przez Mateusz Bacławski (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
xorg 693 Zgłoś post Napisano Sierpień 25, 2012 Optymalizacja może polegać nie tyle co na kodzie PHP, ale co z możliwości używania relacyjności MySQL'a. Poczytaj o JOIN'ach w SQL Poczytaj o INSERT INTO ... ON DUPLICATE KEY Udostępnij ten post Link to postu Udostępnij na innych stronach
Mateusz Bacławski 0 Zgłoś post Napisano Sierpień 26, 2012 //robimy update jeśli w tabeli emails_all jest już podany email $em=mysql_query("UPDATE emails t1, emails_all t2 SET t2.lang = t1.lang, t2.phone= t1.phone, t2.bw= t1.bw WHERE t2.email=t1.email AND (t2.lang='' OR t2.phone='' OR t2.bw='') "); //wstawiamy te których nie ma w tabeli emails_all $em2=mysql_query("INSERT INTO emails_all SELECT (null, email, lang, phone, bw) FROM emails WHERE email NOT IN ( SELECT email FROM emails_all) "); A może być to tak? tylko coś nie chce działać. Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Sierpień 26, 2012 Ale tak nie będzie szybciej. Zainteresuj się tym co napisał xorg czyli JOIN żeby wyeliminować pętlę, w której jest SELECT (zamiast dwóch selectów zrób jeden złączając tabele). UPDATE i INSERT zastąp tak jak napisał xorg INSERT wraz z ON DUPLICATE KEY, choć przy dużej ilości danych może lepiej by było zostawić UPDATE i INSERT ale puszczane w paczkach czyli po 100-500 danych na raz bo wtedy będzie jedno zapytanie a nie wiele cyklicznych. Udostępnij ten post Link to postu Udostępnij na innych stronach