Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] sprawdzenie wszystkich rekordow i ich aktualizacja
Forum PHP.pl > Forum > Przedszkole
elmozaur
Witajcie.
Mialem do zrealizowania nastepujace zadanie:

tabela MySQL miala nastepujaca strukture:
cat_id(int) - id kategorii,
cat_name(varchar50) - nazwa kategorii
cat_parent(int) - id kategorii nadrzednej, jesli 0 to kategoria glowna
cat_position(int) - jesli jest kilka kategorii to ta kolumna mowi o pozycji
cat_dir(int) - 0 oznacza ze w tej kategorii nie ma innych kategorii, 1 oznacza ze w tej kategorii sa inne kategorie.
Z innej bazy danych ajaxem importowalem dane do powyzszej tabeli a do kolumny cat_dir wpisywane bylo zero.
Teraz nalezalo jedynie zaktualizowac kolumne cat_dir aby bylo wiadomo czy kategoria zawiera inne kategorie.

Zrobilem to tak:
SELECT cat_id, cat_parent FROM kategorie
$id=$wiersz['cat_id']
SELECT cat_id FROM kategorie WHERE cat_parent='$id'
$liczba=mysql_num_rows($result)

if($liczba>0 || cat_parent==0)
UPDATE kategorie SET cat_dir=1

To rozwiazanie dziala ale jest koszmarnie wolne. Wykonanie tego kartezjanu trwa kilka minut (okolo 50 000 rekordow w bazie).
Zastanawiam sie czy jest jakis szybszy sposob na wykonanie tego zadania?

pozdrawiam
Grzegorz
IceManSpy
A nie lepiej jest zrobić UPDATE kategorie SET cat_dir=1 WHERE cat_parent=0 ?
Chyba, że to nie o to chodzi?
elmozaur
to jest rozwiazanie poprawne ale tylko dla kategorii glownych (bo one napewno maja inne kategorie w sobie). pozostaje kwestia sprawdzenia wszystkich innych kategorii czy zawieraja w sobie jakies kategorie....
wookieb
  1. UPDATE kategorie SET cat_dir = 1 WHERE cat_id IN (SELECT cat_parent FROM kategorie WHERE cat_parent != 0 GROUP BY cat_parent)

To czy to trwa krótko czy długo zależy od struktury tabeli. Masz tam jakieś indeksy?
elmozaur
indexy sa tyko na cat_id
czy na pozostale kolumny tez zakladac ?
wookieb
na cat_parent też się przyda. Ale oczywiście wszystko zależy od znaczniej większej ilosci czynników.

I wtedy zamiast
Kod
cat_parent != 0

daj
Kod
cat_parent > 0
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.