Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SQL - Nie unieszczanie rekordu w wynikach
starach
post 24.08.2007, 01:56:30
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


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.

Ten post edytował orglee 24.08.2007, 09:50:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
mwojcik
post 24.08.2007, 07:36:51
Post #2





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


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
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: 24.07.2025 - 20:16