У меня есть таблица, в которой подсчитываются случаи появления одного конкретного действия разными пользователями над разными объектами:
CREATE TABLE `Actions` (
`object_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`actionTime` datetime
);
Каждый раз, когда пользователь выполняет это действие, вставляется строка. Я могу посчитать, сколько действий было выполнено над каждым объектом, и упорядочить объекты по «активности»:
SELECT object_id, count(object_id) AS action_count
FROM `Actions`
GROUP BY object_id
ORDER BY action_count;
Как я могу ограничить результаты для первых n объектов? Предложение LIMIT применяется перед агрегированием, поэтому оно приводит к неверным результатам. Таблица потенциально огромна (миллионы строк), и мне, вероятно, нужно считать десятки раз в минуту, поэтому я хотел бы сделать это максимально эффективно.
edit : На самом деле машина права, и я ошибся со временем применения LIMIT. Мой запрос дал правильные результаты, но графический интерфейс пользователя, представивший их мне, отбросил меня ... этот вид делает этот вопрос бессмысленным. Извините!