baca Opublikowano 25 Sierpnia 2012 Udostępnij Opublikowano 25 Sierpnia 2012 Witam, czy ktoś potrafi to zoptymalizować? $em = mysql_query("SELECT * FROM emails GROUP BY email"); $i = 0; while($r = mysql_fetch_array($em)) { $i++; if($i>500) break; $id = $r['id']; $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', '$bw')"); } } else { mysql_query("INSERT INTO emails_all(id, email, lang, phone, bw) VALUES (null, '$email', '$lang', '$phone', '$bw')"); } mysql_query("DELETE FROM emails WHERE id = $id"); } mysql_query("OPTIMIZE TABLE emails"); mysql_query("TRUNCATE emails"); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 26 Sierpnia 2012 Udostępnij Opublikowano 26 Sierpnia 2012 Można bez pętli to zrobić. //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) "); //kasujące pierdoły Poeksperymentuj, nie wiem czy ten INSERT sie wykona poprawnie bo nie sprawdzałem. Na pewno wydajniejsze od tych pętli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Sierpnia 2012 Administratorzy Udostępnij Opublikowano 26 Sierpnia 2012 REPLACE INTO ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 26 Sierpnia 2012 Autor Udostępnij Opublikowano 26 Sierpnia 2012 $em2=mysql_query("INSERT OR REPLACE INTO emails_all SELECT (null, email, lang, phone, bw) FROM emails WHERE email NOT IN ( SELECT email FROM emails_all) "); A może tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Sierpnia 2012 Administratorzy Udostępnij Opublikowano 26 Sierpnia 2012 Jak jest replace, to po co insert? replace = insert or update Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
baca Opublikowano 26 Sierpnia 2012 Autor Udostępnij Opublikowano 26 Sierpnia 2012 $em2=mysql_query("REPLACE INTO emails_all SELECT (null, email, lang, phone, bw) FROM emails WHERE email NOT IN ( SELECT email FROM emails_all) ") or die(mysql_error()); zwraca błąd: Operand should contain 1 column(s). O co chodzi? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 26 Sierpnia 2012 Udostępnij Opublikowano 26 Sierpnia 2012 Jak dajesz replace to już where raczej nie potrzebne jest Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się