Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL - Nie unieszczanie rekordu w wynikach
Forum PHP.pl > Forum > Bazy danych
starach
Pobieram kategorie z bazy za pomocą zapytania SQL w którym jest JOIN LEFT.
Zaprezentuję na przykładzie jak to wygląda.
Powiedzmy że mam w bazie 4 rekordy przy czym każdy następny jest podkategorią poprzedniego.
id name parent
1 Cat1 0
2 Cat2 1
3 Cat3 2
4 Cat4 3
Pobieram je zapytaniem
( zapytanie jest bardziej skomplikowane,
bo w rzeczywistości pobieram dane z 5 tabel na raz
, to jest uproszczony model ):
  1. SELECT project.*, category1.*
  2. category2.cat_id AS cat_id2,
  3. category2.cat_name AS cat_name2,
  4. category2.cat_parent_id AS cat_parent_id2
  5. FROM project LEFT JOIN category AS category1 ON (category1.project_id = project.p_id AND category1.cat_parent_id = 0)
  6. LEFT JOIN category AS category2 ON category1.cat_id = category2.cat_parent_id

Wyświetla to coś takiego:
Kod
p_name   c_id     c_name      c_parent     c_id2         c_name2     c_parent2
Projekt    1        Cat1     0           2         Cat2         1

Czyli nie wyświetla podkategorii-podkategorii ok kiedy usunę AND category1.cat_parent_id = 0
to wynik jest taki:
Kod
p_name   c_id     c_name      c_parent     c_id2         c_name2     c_parent2
Projekt    1        Cat1     0           2         Cat2         1
Projekt    1        Cat2     0           2         Cat3         2
Projekt    1        Cat3     0           2         Cat4         3
Projekt    1        Cat2     0           NULL           NULL          NULL
Projekt    1        Cat3     0           NULL           NULL          NULL
Projekt    1        Cat4     0           NULL           NULL          NULL

Czyli zupełnie nie potrzebnie wyświetla mi 3 ostatnie rekordy.
Co przy dużej liczbie kategorii znacząco opóźni wykonanie.
Co ja mam na to poradzić ? :|

edit > mwojcik:
Nie wiem jak mam ci to jeszcze prościej wytłumaczyć.
Jak zaznaczyłem wcześniej zapytanie pobiera dane Z PIĘCIU TABEL i muszę jakoś je uprościć.
Zrobiłem to nie tyle wystarczająco ile prościej się nie da.
mwojcik
Przede wszystkim jak podales juz "strukture" bazy to chociaz trzymaj sie nazewnictwa w zapytaniu i w wynikach zapytania, ktore publikujesz pozniej.

Nie jestem pewien co chcesz wyciagnac, ale takie zapytanie :
  1. SELECT categories.id AS category_id, categories.name AS category_name,
  2. categories.parent AS parent_category_id, category.name AS parent_category_name,
  3. category.parent AS parent_parent_category_id
  4. FROM categories LEFT JOIN categories AS category ON categories.parent = category.id


zwroci liste kategorii razem z rodzicami :
Kod
category_id    category_name    parent_category_id    parent_category_name    parent_parent_category_id
1    cat 1         0    NULL    NULL
2    cat 2         1    cat 1         0
3    cat 3         2    cat 2         1
4    cat 4         3    cat 3         2
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.