Einzelnen Beitrag anzeigen
  #1  
Alt 04.09.2007, 16:28:42
kendor kendor ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 1
MySQL Query - Rekursiv + Joins

Hallo Leute!
Nun, ich habe ein kleines Problem mit einer meiner MySQL abfragen. und ich wär echt froh wenn irgend ein profi von euch mir da weiter helfen kann!!

Grundlegendes zur datenbank:
ich habe 3 Tabellen mit entsprechenden zeilen (-) wie folgt:
1. events (beihnaltet eine liste von events)
- id_events
- Start
- Stop
- Titel
2. kategorie (beinhaltet verschiedene usergruppen)
- id_cat
- subofcat
- titel
3. daten (beinhaltet dann schlussendlich alle daten und verlinkt die beiden)
- ID
- id_cat
- id_events

als beispiel also:
zeilen in events:
Code:
1 - start1 - stop1- faulenzen
2 - start2 - stop2 - ausflug
3 - start3 - stop3 - schlafen
zeilen in kategorie:
Code:
1 - NULL - Familienmitglied
2 - NULL - Besucher
3 - 1 - Hausmann
4 - NULL - Irgendwer
5 - 2 - Freund
(heisst so viel wie der Hausmann ist auch ein Familienmitglied, der Freund ist ein Besucher - zeile subofcat sagt welches die oberkategorie ist)
6 - 3 - Markus (Markus ist ein Freund und ein Besucher! - fortgeschritten dann)
steht in daten:
Code:
1 - 1 - 3 (von start1 bis stop1 gilt faulenzen [1] für den hausmann [3])
2 - 1 - 4 (von start1 bis stop1 gilt faulenzen [1] für irgendwer [3])
3 - 3 - 1 (von start3 bis stop3 gilt schlafen [3] für alle familienmitglieder [1] - also ach für den hausmann)
4 - 2 - 5 (von start2 bis stop2 gilt ausflug [2] für den freund [5]
soweit so gut

mit der abfrage


PHP-Code:
SELECT 
  events
.titel,
  
kategorie.titel AS Wer,
  
events.start,
  
kategorie1.titel AS Hauptkategorie,
  
events.stop
FROM
 events
 INNER JOIN daten ON 
(events.id_event=daten.id_event)
 
INNER JOIN kategorie ON (cat.id_cat=daten.id_cat)
 
INNER JOIN kategorie kategorie1 ON (kategorie1.id_cat=kategorie.subofcat
kriege ich schön alle daten - aber nur für kategorien die eine unterkategorie sind.

im beispiel würde mir das also folgendes ausgeben:
Code:
> hausmann - faulenzen - start1 - stop1
> freund - ausflug - start2 - stop2
nicht aber die anderen daten die ja noch vorhanden sind:
Code:
> irgendwer - faulenzen - start1 - stop1
> familienmitglieder - schlafen - start3 - stop3
soweit mein problem.

wenn ich mit dem query

PHP-Code:
SELECT 
events
.titel,
kategorie.titel AS Wer,
events.start,
events.stop
FROM
events
INNER JOIN daten ON 
(events.id_event=daten.id_event)
INNER JOIN kategorie ON (kategorie.id_cat=daten.id_cat
alle daten ersuche erhalte ich diese zwar aber ohne die dazugehörigen hauptkategorien (wenn vorhanden)
im beispiel also:
Code:
> hausmann - faulenzen - start1 - stop1
> freund - ausflug - start2 - stop2
> irgendwer - faulenzen - start1 - stop1
> familienmitglieder - schlafen - start3 - stop3
und nicht wie gewünscht:
Code:
> hausmann - familienmitglieder - faulenzen - start1 - stop1
> freund - besucher - ausflug - start2 - stop2
> irgendwer - NULL - faulenzen - start1 - stop1
> familienmitglieder - NULL - schlafen - start3 - stop3
worum es bei der frage eigentlich geht:
wenn es mehrere events gibt für familienmitglieder oder freunde
und ich in einer abfrage alle events für den hausmann suche, dann möchte ich auch die events für familienmitglieder gelistet haben...

kann mir da jemand helfen? mmh (das ganze sollte dann auch noch tiefer gehen als nur eine ebene (also auch für einen markus noch funktionieren [siehe beispiel oben]) - aber daran wage ich noch gar nicht zu denken ) oder gibt es eine andere lösung für mein problem? (anderer tabellenaufbau usw... ) ich bin dankbar für alle anregungen!

gruss kendor

Geändert von kendor (04.09.2007 um 16:36:57 Uhr) Grund: verb.
Mit Zitat antworten