SQL-Query

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
mkoegler

SQL-Query

Beitrag 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?
Benutzeravatar
Quakerjack
Mitglied
Beiträge: 21
Registriert: 03.04.2003 13:19
Kontaktdaten:

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
Antworten

Zurück zu „Coding & Technik“