Skocz do zawartości
Zaloguj się, aby obserwować  
Mateusz Bacławski

Optymalizacja

Polecane posty

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 przez Mateusz Bacławski (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

//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

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

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×