phpbar.de logo

Mailinglisten-Archive

[php] [OT] dringend SQL-Könner gesucht

[php] [OT] dringend SQL-Könner gesucht

jens schmidt js at neuestun.de
Mit Feb 27 09:10:21 CET 2008


Moin Liste,

ich weiß, ich weiß: das gehört hier nicht hin, bitte nicht zu sehr  
meckern. Ich kenne leider keine entsprechende SQL-Liste und es eilt  
ein wenig. Vielleicht kann hier jemand einen weiterbringenden Hinweis  
geben.

Folgendes Problem:
Ich habe zwei Tabellen A, B, die über eine dritte A2B in einer m:n- 
Relation verknüpft sind.
A enthält Texte, B Bilder.
Den Texten A können Bilder zugeordnet sein, müssen aber nicht.
A2B enthält für bestimmte Zuordnungen noch ein Flag (0/1), das diesem  
Bild dann bestimmte Eigenschaften bzgl. des Textes zuweist.

Ich benötige nun alle Texte und, so vorhanden, das Bild, dessen Flag  
eine 1 hat. Das ganze nach einem Datum geordnet.
Der Query sieht stark vereinfacht zunächst so aus:

SELECT * FROM A
LEFT JOIN A2B ON A.id = A2B.a_id
GROUP BY A.id
ORDER BY A.display_date DESC

Die GROUP BY Anweisung soll natürlich dafür sorgen, dass jeder Text  
nur ein mal ausgegeben wird. Das Dumme ist, dass hierbei gerne auch  
Tupel überbleiben, deren Flag 0 ist, obwohl es zu diesem Text auch  
welche gibt, die eine 1 haben (es steht ja auch bis jetzt nicht drin,  
dass das anders sein soll).

Ergebnis ohne GROUP BY und HAVING z.B:

id_a1, Text_a1, id_b1, flag_b_0		<- der kommt zB. in die Gruppe
id_a1, Text_a1, id_b2, flag_b_1		<- den will ich aber haben!!
id_a1, Text_a1, id_b3, flag_b_0
id_a2, Text_a2, NULL,  NULL		<- den natürlich auch
id_a3, Text_a3, id_bx, flag_b_1		<- den auch

Eigentlich sollte HAVING flag = '1' nach GROUP BY helfen (Flag ist  
vom Typ enum, deswegen die Hochkommata), dachte ich, dann gibts aber  
ein leeres Ergebnis.

Für weiterhelfende Tipps dankbar ist:
Jens. :)

Schön' Tach!


php::bar PHP Wiki   -   Listenarchive