Оператор выбора MYSQL - 5 результатов от каждого пользователя - PullRequest
0 голосов
/ 30 июня 2009

Я пытаюсь сделать оператор select, и он работает, за исключением того, что он не ограничивает количество результатов для каждого пользователя (U.id) до 5.

SELECT F.id,F.created,U.username,U.fullname,U.id,I.id,I.cached_image 
FROM favorites AS F 
INNER JOIN users AS U 
ON F.faver_profile_id = U.id 
INNER JOIN items AS I 
ON F.notice_id = I.id 
WHERE faver_profile_id IN ('.$users.')
GROUP BY I.id HAVING COUNT(U.id) <= 5 
ORDER BY F.faver_profile_id, F.created DESC

Я группирую по I.id для устранения дубликатов. Из моего исследования видно, что вы можете использовать HAVING COUNT, только если вы также группируете по этому столбцу, но я не могу сгруппировать по U.id, иначе я потеряю строки результатов.

1 Ответ

1 голос
/ 30 июня 2009

Вместо HAVING, можете ли вы шлепнуть туда LIMIT 5?

Редактировать: OP не может LIMIT весь запрос,
и, AFAIK, MySQL не поддерживает LIMIT в подзапросах,
так что вы можете создать временную таблицу с пятью (5) идентификаторами пользователя:

create table temp_table ( id INT );
insert into temp_table (id) SELECT U.id FROM users U LIMIT 5;

SELECT F.id,F.created,U.username,U.fullname,U.id,I.id,I.cached_image 
FROM   favorites AS F 
       INNER JOIN temp_table AS Ut 
       ON F.faver_profile_id = Ut.id 
       INNER JOIN items AS I 
       ON F.notice_id = I.id 
WHERE faver_profile_id IN ('.$users.')
GROUP BY I.id 
ORDER BY F.faver_profile_id, F.created DESC;

drop table temp_Table;

Дайте нам знать, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...