2016-05-04 12 views
0

Ich analysiere einen SQL Befehl zu einer mysqli Abfrage. Ich möchte die Anzahl der Aufzeichnungen mit unterschiedlichen Bedingungen erhalten. Ich mache das derzeit mit union, aber es ist sehr langsam. Gibt es einen besseren, effizienteren Weg, dies zu tun?Mit verschiedenen Bedingungen zählen

$sql = "SELECT COUNT(*) as Total FROM table1 WHERE GroupId = 2 UNION "; 
$sql .= "SELECT COUNT(*) as Likes FROM table1 WHERE LikesCol IS NOT NULL AND GroupId = 2 UNION "; 
$sql .= "SELECT COUNT(*) as Commented FROM table1 WHERE CommentCol > 0 AND GroupId = 2 UNION "; 
$sql .= "SELECT COUNT(*) as Shared FROM table1 WHERE SharedCol > 0 AND GroupId = 2"; 

Wie Sie bemerken ich alle Datensätze aus der Tabelle am Auswählen wo GroupId = 2 dann nach unten Ich Bohrens, die geteilt und kommentiert usw.

+0

Haben Sie einen Index für GroupId? –

Antwort

2
SELECT sum(GroupId = 2) as Total, 
     sum(LikesCol IS NOT NULL AND GroupId = 2) as Likes, 
     sum(CommentCol > 0 AND GroupId = 2) as Commented, 
     sum(SharedCol > 0 AND GroupId = 2) as Shared 
FROM table1 

und noch besser dank einem Hauch von Paul

SELECT count(*) as Total, 
     sum(LikesCol IS NOT NULL) as Likes, 
     sum(CommentCol > 0) as Commented, 
     sum(SharedCol > 0) as Shared 
FROM table1 
WHERE GroupId = 2 
+2

'WHERE Gruppen-ID = 2' –

Verwandte Themen