2016-05-04 3 views
0

Я разбираю команду SQL на запрос mysqli. Я хотел бы получить количество записей с различными условиями. В настоящее время я делаю это с union, но он очень медленный. Есть ли более эффективный способ сделать это?Получить счетчик с различными условиями

$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"; 

Как можно заметить, я выбрать все записи из таблицы, где GroupId = 2 то я свертывание кто разделяемой и комментировал и т.д.

+0

У вас есть индекс на GroupId? –

ответ

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 

и даже лучше благодаря намеком Павла

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 GroupId = 2' –