Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Optymalne zapytanie
Forum PHP.pl > Forum > PHP
Mariusz421
Witam,
Mam dużą bazę danych (+120 000 rekordów).
Potrzebuję zmienić nazwy z głównej tabeli _produkty) dla wskazanego numeru identyfikacyjnego. Jak zrobić to optymalnie?

Zacząłem robić seriami wg poniższeog skryptu, ale to zajmie chyab wieczność. Mysql pisze coś o JOIN Bufferze (problem w tym, że niegdy nie stosowałem i nie mogę znalexć info jak go zastosować praktycznie)

$q = mysql_query("SELECT eurosoft,p.ean,pn.nazwa AS pnnazwa,pn.rx,dawka,ilosc,pn.miedzynarodow FROM zl_produkty p INNER JOIN zl_produkty_nowa pn ON pn.bazyl=p.eurosoft WHERE zm=0 AND p.ean=pn.ean LIMIT 100");

while ($rk=mysql_fetch_array($q)) { extract($rk);

if ($rx==1) { $nnazwa = ''.$pnnazwa.' '.$dawka.''; } else { $nnazwa = $pnnazwa; }

mysql_query("UPDATE zl_produkty SET nazwa='$nnazwa' ,miedzynarodow='$miedzynarodow', rx='$rx' , zm=1 WHERE eurosoft='$eurosoft' AND ean='$ean' LIMIT 1");
echo '<b>Zm!</b><br />';

}

Dodam, że mam pliki csv obu tabel. Bo dane z jednej tabeli musze nanieść na drugą (z tym, że ta druga ma więcej kolumn - więcej informacji, pierwsza ma tylko numer ID oraz nazwę (na którą mają się zmienić tamte).

Z góry dziękuję za odp i pozdrawiam!
mathijas
Możesz zrobić update na JOIN. W stylu:

  1. UPDATE tabela1 t1 JOIN tabela2 t2 ON t1.id=t2.id SET t1.name=t2.name;


Jeśli chcesz połączyć jakieś kolumny to CONCAT:

  1. UPDATE tabela1 t1 JOIN tabela2 t2 ON t1.id=t2.id SET t1.name=CONCAT(t2.name," ",t2.surname);


I oczywiście WHERE też można zastosować.

PS: 120tys rekordów to jeszcze nie jest duża baza, jak to zrobisz z konsoli to pójdzie elegancko, jak zrobisz przez phpmyadmin to zdechnie na timeout zapewne.
PS2: Zrób indeksy na kolumnach po których łączysz i na kolumnach z where.
PS3: O ile pamiętam nie możne zrobić w ten sposób UPDATE na kolumnach które są w WHERE, możesz sprawdzić. Jeśli to dla Ciebie problem, można to zrobić podzapytaniem jeszcze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.