У меня есть 3 запроса и в них код очень похож, Можно ли сделать из них 1 запрос?
1) Показывает сколько статей в каждой категории
SELECT category.name, count(question.name)
FROM category
LEFT JOIN question
ON category.id = question.cat_id
GROUP BY category.name
2) Показывает, сколько вопросов опубликовано в каждом разделе. Если статус = 1, значит опубликовано
SELECT category.name, count(question.status)
FROM category
LEFT JOIN question
ON category.id = question.cat_id AND question.status = 1
GROUP BY category.name
3) Показывает, сколько вопросов без ответов, в каждом разделе
SELECT category.name, count(question.answer)
FROM category
LEFT JOIN question
ON category.id = question.cat_id AND question.answer = ""
GROUP BY category.name
SELECT category.name
, COUNT(question.name)
, SUM(question.status = 1)
, SUM(question.answer = "")
FROM category
LEFT JOIN question
ON category.id = question.cat_id
GROUP BY category.name
Запрос написан для MySQL. Если используется другая СУБД, замените SUM(condition) на SUM(CASE WHEN condition THEN 1 ELSE 0 END).
Должна получиться выборка:
SELECT (SELECT ...), (SELECT ...), ...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей