SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.09.2013 22:09:19

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Вывод всех категорий с подсчетом количества записей у каждой

Здравствуйте, пожалуйста подскажите как вывести категории с кол-ом записей.
Стандартная структура:

category
------------------------------
id  parent  name
1   0         кат1
2   0         кат2
3   2         кат3
4   2         кат4

post
-----------------------------
id  name        category
1   раз           1
2   два           3
3   три           4

Как вывести все категории, не важно в каком порядке, лиж бы все, и с кол-ом записей для каждой?

Пример:
id  name  count
1   кат1    1
2   кат2    2
3   кат3    1
4   кат4    1

ИЛИ
Пример 2:
id  name  count
1   кат1    1
2   кат2    0
3   кат3    1
4   кат4    1

Неактивен

 

#2 09.09.2013 22:50:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Вывод всех категорий с подсчетом количества записей у каждой

Попробуйте

SELECT `id`, `name`, (SELECT count(*) FROM `post` WHERE category = c.id ) FROM `category` c;

или

SELECT c.id,c.name, count(p.id) FROM `post` p JOIN `category` c  ON p.category = c.id
GROUP BY p.category;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 09.09.2013 23:00:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вывод всех категорий с подсчетом количества записей у каждой

select c.id, c.name, count(p.id) from category c left join post p on c.id=p.category group by c.id;

Неактивен

 

#4 09.09.2013 23:09:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Вывод всех категорий с подсчетом количества записей у каждой

Разница между моим вторым запросом и запросом vasya в том, что мой не выведет те категории, в которых нету постов вовсе.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 09.09.2013 23:15:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вывод всех категорий с подсчетом количества записей у каждой

Подводя итог, оптимальным будет твой первый запрос, который с подзапросом.

Неактивен

 

#6 09.09.2013 23:19:10

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Вывод всех категорий с подсчетом количества записей у каждой

Подожди, а как же то, что там на каждой итерации подзапрос будет выполняться? Сколько уже копий на этот счет ломали в тредах smile.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 09.09.2013 23:24:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вывод всех категорий с подсчетом количества записей у каждой

Ну так тут объективно зависимый запрос.
При join так же на каждой строке первой таблицы будет идти обращение ко второй, а потом полученный массив группироваться. ИМХО, в данном случае подзапрос будет быстрее.

Неактивен

 

#8 09.09.2013 23:31:39

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Вывод всех категорий с подсчетом количества записей у каждой

Довод принят ). По хорошему, надо бы стресс-тест устроить всех вариантов, но это лишь в том случае, если топикстартеру нужно будет сильно оптимизировать именно по скорости. Да и то, категорий вряд ли будут десятки/сотни тысяч, так что наверное скорости будут все же похожими.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 09.09.2013 23:38:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вывод всех категорий с подсчетом количества записей у каждой

Категорий может быть мало, а постов много. Тогда в случае join будет очень большая временная таблица перед группировкой.
С другой стороны count по индексированному полю очень быстрый. Отсюда и предпочтение подзапросу.

Неактивен

 

#10 10.09.2013 09:15:07

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Вывод всех категорий с подсчетом количества записей у каждой

Большое спасибо ))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson