SQL-Select Abfragen



  • kann man folgende MySQL-Abfragen irgendwie zusammenfassen?

    SELECT COUNT(mes_id) AS cnt FROM tabelle WHERE mem_id='xxx' AND folder='inbox' AND type='1' AND new='new'
    SELECT COUNT(mes_id) AS cnt FROM tabelle WHERE type='2' AND mem_id='xxx'
    SELECT COUNT(mes_id) AS cnt FROM tabelle WHERE type='3' AND mem_id='xxx'
    SELECT COUNT(mes_id) AS cnt FROM tabelle WHERE type='4' AND mem_id='xxx'
    SELECT COUNT(mes_id) AS cnt FROM tabelle WHERE (type='5' OR type='6') AND mem_id='xxx'

    oder gibt es kein drumherum, alles einzeln zu machen? :xmas1:



  • als erstes sieht es so aus, als wenn 2. - 6. Zeile einfach zusammengefasst werden kann:

    SELECT COUNT(mes_id) AS cnt
    FROM   tabelle
    WHERE  type between '2' and '6'
    AND    mem_id='xxx'
    

    oder

    SELECT COUNT(mes_id) AS cnt
    FROM   tabelle
    WHERE  mem_id='xxx'
    AND    type in ( '2', '3', '4', '5', '6' )
    

    mit dem 1. zusammengefasst:

    SELECT COUNT(mes_id) AS cnt
    FROM   tabelle
    WHERE  mem_id='xxx'
    AND    (( type in ( '2', '3', '4', '5', '6' ))
    OR     (type = '1'
    AND    folder = 'inbox'
    AND    new = 'new' ))
    

    ...ohne Gew├Ąhr ­čśâ



  • naja COUNT() liefert f├╝r jede Abfrage nen anderen Wert, ich br├Ąuchte also eine Abfrage die alle einzelnen COUNT()'s beinhaltet und zur├╝ckgeben kann...

    bringt das Erzeugen einer View und die Abfragen auf dieser durchf├╝hren etwas?



  • Hmm, eventuell w├Ąre ja sowas ein Ansatz:

    SELECT count(type),type
    WHERE mem_id='xxx'
    GROUP BY type
    

    (wobei - die Bedingungen je nach Typ m├╝sstest du auch nich in's where einordnen)



  • Die Abfragen 2 - 4 kannst du ├╝ber den In Operator und Group by zusammenfassen.
    Die Abfragen musst du so belassen.
    Wenn ich dich richtig verstanden habe, m├Âchtest du nur ein ResultSet haben. Also einfach zwichen den einzelnen Select's ein Union hinzuf├╝gen um die Ergebnisse zusammen zuf├╝gen.

    SELECT ...
    UNION
    SELECT ...
    UNION
    SELECT ...



  • select
    count( if(mem_id='xxx' AND folder='inbox' AND type='1' AND new='new',1,0) ) as cnt1,
    count( if(type='2' AND mem_id='xxx',1,0) ) as cnt2,
    count( if(type='3' AND mem_id='xxx',1,0) ) as cnt3,
    count( if(type='4' AND mem_id='xxx',1,0) ) as cnt4,
    count( if((type='5' OR type='6') AND mem_id='xxx',1,0) ) as cnt5
    ;


Log in to reply