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
Don Feb 28 22:56:57 CET 2008


Moin,

> also Daten aus a, a2b und b immer dann wenn ab2.flag 1 ist oder gar  
> nicht
> da....
> select *
> from a
> left join a2b on a.id=a2b.a_id
> left join b on a2b.b_id=b.id
> where a2b.flag='1' or a2b.flag is null
> GROUP BY A.id
> ORDER BY A.display_date DESC
>
> Liefert Dir erst mal die Daten bei das Flag haben oder gar keinen  
> Eintrag in
> der m:n
> Mit dem Gruppieren und aggregieren musst du vorsichtig sein. Kommt  
> es "nur"
> darauf an, das das Flag bekannt ist, kannst du mit max(flag) daran  
> gehen.
> Brauchst Du genau die Daten mit dem Flag, auch wenn es andere gibt,  
> wirst Du
> um selber auseinandernehmen nicht kommen, da Du beim aggregieren  
> Funktionen
> angibst, aber nicht bestimmte Datensätze.

Der zweite ist der Fall welcher:
Ich benötige immer die Daten aus a, wenn das Flag gesetzt ist, dann  
auch die entsprechenden Daten aus b. max(flag) zieht mir also nur die  
möglicherweise vorhandene 1, aber nicht zwingend die zum Datensatz  
passenden anderen Daten aus b (zählte zu den vorher schon probierten  
Lösungen).

Die gestern von Manuel und Sascha empfohlene Lösung trafen deswegen  
genau den Kern! Funzt prima!

>> Es macht allerdings keinen Unterschied ob die Bedingung WHERE  
>> steht oder
>> im JOIN. Lediglich dass so eine Bedingung nicht ins JOIN sollte, weil
>> sich die gesteigerte Übersicht, die ein JOIN erreicht in dem es deine
>> Suchparamater von einfachen Verknüpfungen trennt zunichte macht.
>>
>>
>
> Bei diesem Fall möglicherweise nicht, aber es kann sehr wohl einen
> Unterschied machen, bei mir war es im Zusammenhang mit einem LEFT  
> JOIN.

Deswegen tut's die Lösung mit der Bedingung im WHERE tatsächlich  
nicht, denn die schmeißt mir bloß dann Ergebnisse, wenn es eben  
passende Einträge in a2b gibt, sonst bekomm ich auch keine Ergebnisse  
aus b, hätte mir den LEFT JOIN also sparen können.
Die Nummer mit den Bedingungen im JOIN zieht mir halt vor einer  
Gruppierung die passenden Tupel in die Gruppierungen, kannte ich bloß  
vorher nicht. Wieder wat gelernt :)

Dank und Gruß noch mal an euch,
jens.


php::bar PHP Wiki   -   Listenarchive