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
;