mysql join count

94
18 марта 2021, 01:40

Есть запрос:

SELECT topics.*,
       if (topics.expire > '2019-07-02 00:28:03', 1, 0) AS state 
FROM `topics` WHERE `topics`.`deleted_at` IS NULL ORDER BY state DESC LIMIT 20

Получаем 20 строк...

Хочу также посчитать количество постов!

Пробовал так:

SELECT topics.*,
       (SELECT COUNT(posts_id) WHERE server_id = servers.id) AS posts_count, 
       if (topics.expire > '2019-07-02 00:28:03', 1, 0) AS state 
FROM `topics` 
INNER JOIN `posts` ON `posts`.`topic_id` = `topics`.`id` 
WHERE `topics`.`deleted_at` IS NULL ORDER BY state DESC LIMIT 20

Получается только 1 строка...

Пробовал и так:

SELECT topics.*,
       COUNT(posts_id) AS posts_count, 
       if (topics.expire > '2019-07-02 00:28:03', 1, 0) AS state 
FROM `topics` 
INNER JOIN `posts` ON `posts`.`topic_id` = `topics`.`id` 
WHERE `topics`.`deleted_at` IS NULL ORDER BY state DESC LIMIT 20

Тоже получается 1 строка!

Что не так делаю? Как получить все те же 20 строк + еще count postov по каждому топику?

Answer 1

Count подразумевает что будет использоваться функция group_by, поэтому у Вас получается 1 строка. Для того чтобы заработало то, что вы хотите необходимо скорректировать свой запрос:

SELECT topics.*, count(posts_id) as posts, 
if(topics.expire > '2019-07-02 00:28:03', 1, 0) AS state 
FROM `topics` 
INNER JOIN `posts` ON `posts`.`topic_id` = `topics`.`id` 
WHERE `topics`.`deleted_at` IS NULL 
GROUP BY topics.id
LIMIT 20
READ ALSO
Создание dblink к БД MySQL

Создание dblink к БД MySQL

Необходимо создать dblink к БД MysqlПросьба помочь

147
Выполнение миграций в консоли yii2

Выполнение миграций в консоли yii2

Есть проектВ нем есть миграции

110
Сохранить картинку на сервер

Сохранить картинку на сервер

Ребят, всем привет! столкнулся с такой проблемой - сохранение картинки на сервер

137
Получить свойство Protected из объекта

Получить свойство Protected из объекта

Приходит от апи ответМне нужно получить некоторые значения из него, но свойство xmlData protected и не могу получить доступ к нему

92