SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.10.2010 11:27:24

Dimanoss
Участник
Зарегистрирован: 14.10.2010
Сообщений: 1

Не срастаются запросы... SELECT + COUNT()

Вот столкнулся с какой, на первый взгляд - пустяковой заморочкой:  Имеется проектик, где пользователи голосуют за понравившуюся фотку.  В таблицу заносится ID фотки и дата голосования.  Всё простенько, всё работает.  Теперь пишу скрипт отчёта, в которой голоса суммируются по месяцам, и никак не могу въехать в правильную логику SQL-запроса.  Т.е., в идеале нужна таблица:

picID    |     jan     |     feb     |     mar     |     ...
-------------------------------------------------------------------
  1       |      207   |     89      |    1122    |
  2       |      98     |       0      |       89     |
  4       |    1254   |     343    |     808     |

Делать это циклом запросов (SELECT COUNT(*) AS jan WHERE (picID=xxx AND voted>'2009-12-31' AND voted<'2010-02-01')) как-то уж черезчур громоздко.  Как думаете, есть ли более изящное решение?

Спасибо заранее.

Неактивен

 

#2 14.10.2010 12:41:41

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

Re: Не срастаются запросы... SELECT + COUNT()

Проще всего сделать

select picID, month(voted) `месяц`, count(picID) `кол-во` from tb_name group by 1,2;


А уже в приложении привести к удобному вам виду.

Неактивен

 

#3 14.10.2010 13:10:11

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Не срастаются запросы... SELECT + COUNT()

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

SELECT picID, DATE_FORMAT(voted, "%b, %Y"), COUNT(*) FROM `table_name` GROUP BY picID, LAST_DAY(voted)
.

Неактивен

 

#4 14.10.2010 13:16:14

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Не срастаются запросы... SELECT + COUNT()

ну а в плане производительности, предложил бы хранить либо LAST_DAY(voted), либо MONTH(voted) (в зависимости от необходимости учитывать год) в таблице с результатами голосования и ввести индекс (picID + "это поле"). избыточность в данном случае позволит произвести группировку более произодительно

Неактивен

 

Board footer

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