Мне нужно найти наиболее популярное вхождение элемента, сгруппированного по дате, и отобразить общее количество всех элементов вместе с названием этого элемента. Возможно ли что-то подобное в одном запросе?
примечание: если все они имеют одинаковое вхождение (см. Последние 3 строки во вставке), то я могу просто показать случайное или первое или последнее вхождение (в зависимости от того, что проще).
Если это не может быть сделано в SQL, то придется просмотреть результаты и отсортировать данные с помощью PHP, что выглядит довольно грязно.
Редактировать: Извините, у меня был неправильный итог для '2009'08-04'. Должно быть 4.
Пример того, что мне нужно:
+------------+---------------------+-------+
| date | item | total |
+------------+---------------------+-------+
| 2009-08-02 | Apple | 5 |
| 2009-08-03 | Pear | 2 |
| 2009-08-04 | Peach | 4 |
| 2009-08-05 | Apple | 1 |
| 2009-08-06 | Apple | 3 |
+------------+---------------------+-------+
Вот пример таблицы:
CREATE TABLE IF NOT EXISTS `test_popularity` (
`date` datetime NOT NULL,
`item` varchar(256) NOT NULL,
`item_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `test_popularity` (`date`, `item`, `item_id`) VALUES
('2009-08-02 00:00:00', 'Apple', 1),
('2009-08-02 00:00:00', 'Pear', 3),
('2009-08-02 00:00:00', 'Apple', 1),
('2009-08-02 00:00:00', 'Apple', 1),
('2009-08-02 00:00:00', 'Pear', 0),
('2009-08-03 00:00:00', 'Pear', 3),
('2009-08-03 00:00:00', 'Peach', 2),
('2009-08-04 00:00:00', 'Apple', 1),
('2009-08-04 00:00:00', 'Peach', 2),
('2009-08-04 00:00:00', 'Peach', 2),
('2009-08-04 00:00:00', 'Pear', 3),
('2009-08-05 00:00:00', 'Apple', 1),
('2009-08-06 00:00:00', 'Apple', 1),
('2009-08-06 00:00:00', 'Peach', 2),
('2009-08-06 00:00:00', 'Pear', 3);