2011-10-07 3 views
0

나는 다음과 같은 MySQL의 쿼리를 가지고 :MySQL 쿼리에서 모든 ID를 선택하지만 제한이 있습니까?

(특정 콘텐츠 저자)의 콘텐츠의 수를 반환
SELECT SUM(IF(num_content>3,3,num_content)) 
FROM 
(
SELECT DATE(FROM_UNIXTIME(content_timestamp)) as dt, COUNT(id) as num_content 
FROM content  
WHERE author = 'newbtophp' 
GROUP BY DATE(FROM_UNIXTIME(content_timestamp)) 
)a 

하지만 다음과 같은 제한 =>에만 하루에 데이터의 3 행의 최대 고려할 것 (content_timestamp 사용).

SELECT id 
FROM 
(
SELECT DATE(FROM_UNIXTIME(content_timestamp)) as dt, COUNT(id) as num_content, id  FROM content  
WHERE author = 'newbtophp' 
GROUP BY DATE(FROM_UNIXTIME(content_timestamp)) 
)a 

: 그러나 지금은 모든 식별자가 제한에 해당 (다음 querymysql_fetch_assocwhile loop을) 반환 꿔, 잘 작동

, 나는 다음과 같은 쿼리를 시도했습니다

그러나 운이 없다 (제한이있는 ID를 반환하지 않음).

중요한 문제는 ID를 반환하는 동안 제한을 통합하는 방법을 모르겠다는 것입니다.

모든 답변에 감사드립니다.

+0

. 하위 쿼리는 필수적으로 db에서 자체 테이블로 처리됩니다. 쿼리에서 "id"라는 필드를 반환하지 않으므로 'id'필드를 선택할 수 없습니다. 'dt'또는 'num_content'만 선택할 수 있습니다. –

+0

감사합니다. @MarcB 방금 하위 쿼리에 ID를 추가하려고 시도했지만 여전히 운이 없습니다. / – user962026

답변

0

확실히 더 효율적인 솔루션을 (가입)이 존재해야하지만, 다음과 같은 읽을 수 있습니다 : 당신이 파생 된 테이블에서 선택하면, 당신은 내부 쿼리에 의해 반환되지 않습니다 필드를 선택할 수 없습니다

SELECT id, content_timestamp 
FROM content c 
WHERE author = 'newbtophp' 
AND (SELECT COUNT(*) 
    FROM content 
    WHERE DATE(FROM_UNIXTIME(content_timestamp)) = DATE(FROM_UNIXTIME(c.content_timestamp)) 
    AND content_timestamp < c.content_timestamp 
    ) < 3 
ORDER BY content_timestamp 
관련 문제