Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] sprawdzenie wszystkich rekordow i ich aktualizacja
elmozaur
post 31.12.2010, 16:18:09
Post #1





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
IceManSpy
post 31.12.2010, 17:36:21
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A nie lepiej jest zrobić UPDATE kategorie SET cat_dir=1 WHERE cat_parent=0 ?
Chyba, że to nie o to chodzi?

Ten post edytował IceManSpy 31.12.2010, 17:37:56


--------------------
Go to the top of the page
+Quote Post
elmozaur
post 31.12.2010, 18:22:50
Post #3





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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....
Go to the top of the page
+Quote Post
wookieb
post 31.12.2010, 18:49:21
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  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?


--------------------
Go to the top of the page
+Quote Post
elmozaur
post 1.01.2011, 13:11:19
Post #5





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


indexy sa tyko na cat_id
czy na pozostale kolumny tez zakladac ?
Go to the top of the page
+Quote Post
wookieb
post 1.01.2011, 13:21:48
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 23:14