MYSQL select语句 - 每个用户5个结果

时间:2009-06-30 04:56:03

标签: mysql select

我正在尝试执行一个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 个答案:

答案 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;

让我们知道它是如何运作的。