Kalle_B: MySQL: Anzahl Felder in eriner Zeile ermitteln

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

  1. 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

    1. Hallo Ilja,

      beispiel IF(spalte IS NULL , 0, 1), geht aber auch mit case oder anderen funktionen.

      Das kann ich gut gebrauchen, danke.

      Kalle

  2. count(info1,info2,info3,info4,info5,info6)

    Kannst Du nicht einfach die Werte addieren?

    1. Kannst Du nicht einfach die Werte addieren?

      Leider nein, wenn einer NULL ist, ist das ganze Ergebnis NULL