Seite 1 von 1

SQL-Query

Verfasst: 31.03.2003 12:57
von mkoegler
Hallo

Habe folgendes Problem:

In meinem CMS habe ich Hauptkataloge und Unterkataloge;
Die Titel diese Kataloge werden in der Tabelle "katalog" gespeichert.
In dieser Tabelle habe ich das Attribut katalog_id, das jeder Datensatz automatisch zugewiesen bekommt sowohl Hauptkataloge als auch Unterkataloge;
Zusätzlich habe ich noch ein Attribut katalog_katalog_id, das bei den Unterkatalogen die katalog_id des jeweiligen Hauptkatalogs enthält (zur eindeutigen Zuordnung der Unterkataloge zu den Hauptkatalogen),
Bei den Hauptkatalogen ist diese Attribut =0;
Ich möchte in meiner Navigation alle Hauptkataloge angezeigt bekommen - und beim klicken auf die Hauptkataloge, die Unterkataloge enthalten möchte ich dass diese eingerückt angezeigt werden.
Jetzt bin ich auf der Suche nach der passenden SQL-Abfrage mit der ich die Unterkategorien in Abhängigkeit von der Hauptkategorie selektieren kann.
Dies habe ich schon probiert:

SELECT * FROM katalog whére katalog_id = katalog_katalog_id ;

Dies funktioniert nicht da er jeden Datensatz einzeln durchforstet;
Gibt es in SQL einen Befehl, der von jedem Datensatz das Attribut katalog_id durchforstet und sie mit der katalog_katalog_id eines jeden Datensatzes vergleicht?
Das ganze habe ich schon mit einer INNER JOIN Abfrage versucht (SELECT * FROM katalog INNER JOIN katalog ON katalog.katalog_id = katalog.katalog_id WHERE ...) Das funkt auch nicht da ich zweimal die gleiche Tabelle vergleiche;

Könnt Ihr mir da helfen?

Verfasst: 07.04.2003 14:35
von Quakerjack
hmm kommt vielleicht etwas spät aber hast du's mal mit

SELECT * FROM katalog whére katalog_id LIKE $id-variable;

das LIKE steht in mysql fuer den direkten vergleich.

Mfg

Quaker

Verfasst: 07.04.2003 18:44
von Pyramide
Quakerjack hat geschrieben:das LIKE steht in mysql fuer den direkten vergleich.
LIKE ist ein Wildcard-Vergleich. http://www.mysql.com/doc/en/String_comp ... tions.html

Zur Frage: entweder

Code: Alles auswählen

SELECT hk.*, uk.*
FROM katalog hk, katalog uk
WHERE uk.katalog_katalog_id = hk.katalog_id
Damit erstellst du intern zwei "Kopien" (Aliase) der Tabelle katalog (hk und uk), die du dann miteinander verbinden kannst. Wenn du die Felder des Resultsets mit Namen ansprechen willst, musst du ihnen Aliase geben, z.B:

Code: Alles auswählen

SELECT hk.name AS hauptkatalog_name, hk.irgendwas AS hauptkatalog_irgendwas, uk.name AS unterkatalog_name
Oder du startest erst eine Abfrage für de Hauptkataloge und dann mit der erhaltenen ID eine weitere zur Auflistung der Unterkataloge.