2009-06-30 5 views
0

내가 SELECT 문을 할 노력하고있어 그것은 5MYSQL select 문 - 각 사용자 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 
각 사용자 (U.id)에 대한 결과의 수를 제한 아니에요 것을 제외하고 작동

나는 중복을 제거하기 위해 I.id로 그룹화합니다. 저의 연구 결과에 따르면, 그 칼럼별로 그룹핑을하고 있지만 U.id로 그룹화 할 수 없거나 결과 행을 잃어 버리는 경우에만 HAUNTING COUNT를 사용할 수있는 것처럼 보입니다.

답변

1

HAVING 대신에 LIMIT 5을 때릴 수 있습니까?

편집 : 영업 이익은하지 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; 

어떻게 작동하는지 알려주십시오.

+0

아니요. 최대한 LIMIT을 (를) 전체 쿼리에만 적용 할 수 있습니다. – makeee