[MYSQL] Wybranie kategorii nie zawierających podkategorii

Odpowiedz Nowy wątek
2010-06-23 14:22
0

Witam.
Mam dwie tabele - sl_minislownik_kat i sl_minislownik. W sl_minislownik_kat przechowuję same kategorie (pola id, typ i tekst). W sl_minislownik są wpisy (podkategorie i ich podrzędne wpisy, ale to raczej nieistotne w tym przypadku) z kolumnami id, typ, kat, tekst, tekst_podrz. W PHP łączę kategorie z ich podkategoriami na zasadzie: biorę ID z tabeli z kategoriami i szukam podkategorii, w których komórka "kat" jest taka sama. Problem pojawia się, gdy kategoria nie ma żadnych podkategorii - taką również wypadałoby wyświetlić.
Moje zapytanie łączące te dwie tabele wygląda tak:

$zapytanie = mysql_query("  SELECT sl_minislownik.id, sl_minislownik.typ, sl_minislownik.kat, sl_minislownik.tekst, sl_minislownik.tekst_podrz, sl_minislownik_kat.tekst_kat 
                FROM sl_minislownik 
                INNER JOIN sl_minislownik_kat 
                ON sl_minislownik.kat = sl_minislownik_kat.id 
                $warunek
                ORDER BY sl_minislownik.tekst, sl_minislownik.tekst_podrz
                ");

Zmienna $warunek może być albo pusta (gdy chcemy wyświetlić wszystko), albo może przyjmować wartość:

WHERE tekst LIKE '%$szukaj%' OR tekst_podrz LIKE '%$szukaj%'

gdy chcemy coś wyszukać.
Wszystko wyjaśnione, ale przejdźmy do sedna...
Jak przerobić zapytanie, aby brane pod uwagę były też kategorie bez podkategorii? Domyślam się, że w tym zapytaniu już nie da się nic zrobić - jest ono łączone, czyli reszta pól byłaby niewiadoma...

Idąc na około można by najpierw wczytać wszystkie wartości z pól kat, a następnie zrobić select not in (te wartości), ale to są dwa zapytania i musiałbym osobno obrabiać dwa obiekty mysql.

Jest na to jakiś sposób?

Pozostało 580 znaków

2010-06-23 14:40
0

Zapytanie zwracające kategorie bez podkategorii będzie wyglądało mniej więcej w ten sposób...

SELECT *
FROM sl_minislownik
RIGHT OUTER JOIN sl_minislownik_kat ON sl_minislownik.kat = sl_minislownik_kat.id;

Btw. jeżeli kategorii jest mniej niż podkategorii, a domyślam się, że tak jest... to szybsze będzie zapytanie

SELECT *
FROM sl_minislownik_kat
LEFT OUTER JOIN sl_minislownik ON sl_minislownik.kat = sl_minislownik_kat.id;

Pozostało 580 znaków

2010-06-23 15:40
0

Działa rewelacyjnie! :)
Dzięki za szybką odpowiedź. Nigdy bym na takie coś nie wpadł.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0