我正在尝试执行一个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分组,否则我会丢失结果行。
答案 0 :(得分:1)
而不是HAVING
,你可以在那里拍一个LIMIT 5
吗?
修改: OP无法LIMIT
整个查询,
并且,AFAIK,MySQL 在子查询中不支持 LIMIT
,
因此,您可以使用五(5)个用户ID创建临时表:
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;
让我们知道它是如何运作的。