MySQL: Anzahl Felder in eriner Zeile ermitteln
Kalle_B
- datenbank
0 Ilja0 King^Lully0 Kalle_B
Hallöle,
durch LEFT JOIN ermittle ich in einer Zeile sechs Informationen. Davon können 2..5 NULL sein.
Da ich die Zeile mit den meisten Informationen per ORDER BY ... DESC zuerst brauche, habe ich versucht, die Anzahl in einer eigenen Spalte zu ermitteln:
,count(info1,info2,info3,info4,info5,info6)
Das mag SQL aber gar nicht. Wie bekomme ich es hin, dass die meisten Treffer oben stehen in der Liste?
Hier das Original, erstmal bis info3:
SELECT
6 slot_nr
,kon1.aussteller_id chef_id
,1536 aus2_id
,kon1.gruppen_id gruppen_id
,count(kon1.besucher_id,kon2.besucher_id,kon3.besucher_id) anz_grp
,kon1.besucher_id Abes_id
,kon1.prio_1 Aprio_1
,kon1.prio_2 Aprio_2
,anw1.slot_nr Aanw_slot
,anw1.partner_id Aanw_par
,anw1.event_id Aanw_evt
,kon2.besucher_id Bbes_id
,kon3.besucher_id Cbes_id
FROM tm_kontakte as kon1
LEFT JOIN tm_anwesenheit as anw1
ON anw1.adr_id =kon1.besucher_id
AND anw1.slot_nr=6
LEFT JOIN tm_kontakte as kon2
ON kon2.aussteller_id = kon1.aussteller_id
AND kon2.besucher_id != kon1.besucher_id
AND kon2.gruppen_id > 0
AND kon2.gruppen_id = kon1.gruppen_id
LEFT JOIN tm_kontakte as kon3
ON kon3.aussteller_id = kon1.aussteller_id
AND kon3.besucher_id != kon1.besucher_id
AND kon3.besucher_id != kon2.besucher_id
AND kon3.gruppen_id > 0
AND kon3.gruppen_id = kon1.gruppen_id
WHERE kon1.aussteller_id = 1536
AND kon1.slot_nr = 0
ORDER BY chef_id
Lieben Gruß, Kalle
yo,
deine abfrage ist schwer zu lesen, da du in der ON klausel der Joins nicht nur die join bedingung geschrieben hast, sondern auch noch andere einschränkungen mit unterbringst. ich würde das voneinander trennen.
was deine sortierung angeht, so ist count an der stelle kein so guter ansatz. benutze dafür funktionen, die dir den wert 0 zurückliefern, wenn der wert NULL ist, ansonsten 1 und addiere dann die 6 info felder auf.
beispiel IF(spalte IS NULL , 0, 1), geht aber auch mit case oder anderen funktionen.
Ilja
Hallo Ilja,
beispiel IF(spalte IS NULL , 0, 1), geht aber auch mit case oder anderen funktionen.
Das kann ich gut gebrauchen, danke.
Kalle
count(info1,info2,info3,info4,info5,info6)
Kannst Du nicht einfach die Werte addieren?
Kannst Du nicht einfach die Werte addieren?
Leider nein, wenn einer NULL ist, ist das ganze Ergebnis NULL