2011-03-19 1 views
0

배경

의견 표가 있습니다. 각 주석은 '리드'테이블 또는 '프로드'테이블의 특정 행에 속합니다. 'lead'및 'prod'테이블에는 각 행에 대해 여러 주석이있을 수 있습니다. 또한 각 행에 대해 동일한 'kstatus'와 함께 여러 주석이있을 수 있습니다.MySQL SELECT (그룹 내 집계)에 대한 도움이 필요합니다.

comments 
    INT id /* primary key */ 
    ENUM('lead', 'prod') type /* tells me whether the comment belongs to a row in the lead table or the prod table */ 
    INT fid /* foreign key, refers to the id column in either the lead or prod table */ 
    MEDIUMTEXT comment /* the comment itself */ 
    INT timestamp /* when the comment was written, i.e. 1300530201 */ 
    INT kstatus /* foreign key, refers to the id column in the kstatus column */ 

lead 
    INT id 
    ... 

prod 
    INT id 
    ... 

kstatus 
    INT id 
    ... 

타입 = '우세'및 FID = 105에 코멘트 타입 = '자극'와 lead.id = 105 주석이 리드 로우를 참조하여 FID = 105의 행을 의미 prod.id와 자극 = 105

질문

내가 어떤 kstatus으로 '리드'테이블의 각 행에 대해 주어진 (있는 경우, 소인 기준) 최초의 주석을 선택합니다 (예를 들어 14).

결과가 너무 적은 결과를 나타내는 내 시도입니다. 어쩌면 fid가 lead.id를 참조하고 fid가 prod.id를 참조했기 때문일 수 있습니까?

SELECT C1.* 
FROM comments AS C1 
LEFT JOIN comments AS C2 ON (C1.timestamp > C2.timestamp AND C1.fid = C2.fid) 
WHERE C2.timestamp is NULL 
AND C1.type = 'lead' 
AND C1.kstatus = 14 
GROUP BY C1.fid 

답변

0
select c2.* 
from (
    select min(c.id) realfirstcomment 
    from (
     select fid, min(timestamp) as firstcomment 
     from comments 
     where type='lead' and kstatus=14 
     group by fid 
    ) f, comments c 
    where f.fid = c.fid 
     and c.type='lead' and c.kstatus=14 
     and f.firstcomment = c.timestamp 
    group by c.fid 
) f2, c2 
where f2.realfirstcomment = c2.id 
+0

올바르게 이해하면 기존의 각 kstatus에 대한 첫 번째 의견을 제공합니다. 그건 내가 원하는 것이 아니다. 특정 kstatus (예 : 14)가있는 각 리드에 대한 첫 번째 의견을 원합니다. –

+1

@arex - 댓글을 올리는 동안 답변이 업데이트되었습니다. 'group by fid' => 리드 당 – RichardTheKiwi

+1

질의에는'and kstatus = 14'가 포함되어있어 각 리드를 줄 수는 없으므로 구체적인 결과를 얻을 수 있습니다. 쿼리를 실행 했습니까? – Pentium10

0

하기 만하기 때문에 제품과 리드 사이의 혼합의 결과를 잃고 있지만,뿐만 아니라 kstatus 값 사이에되지 않습니다 - 왼쪽 가입 유형에 관계없이 및 kstatus으로하는 이전 타임 스탬프 C2의 모든 행을 찾습니다 fid이 같은 한.

하나의 솔루션은 결합 조건에 AND C1.type = C2.type AND C1.kstatus = C2.kstatus을 추가하는 것입니다.

+0

예! 나는 당신의 제안을 추가했고 나는 3034 개의 결과를 얻었다. 정확히 내가 얻은 행과 같습니다 : "SELECT * FROM comments kstatus = 14 AND type = 'lead'GROUP by fid"의미가 있습니까? –

관련 문제