2012-10-12 3 views
1

의 숫자로 필드 결과를 곱 MySQL은, 내 쿼리는 다음과 같습니다내 데이터베이스에서 컬럼의 다양한 선택하고있어 다른 필드

SELECT st.* , u.username creator, COUNT(DISTINCT se.sentenceid) AS sentences, 
    COALESCE(SUM(v.vote), 0) score, 
    GROUP_CONCAT(se.text ORDER BY se.sentenceid SEPARATOR ' ') text 
FROM stories st 
JOIN sentences se ON st.storyid = se.storyid 
LEFT OUTER JOIN votes v ON st.storyid = v.storyid 
LEFT OUTER JOIN users u ON st.creatorid = u.userid 
GROUP BY st.storyid 
LIMIT 30 

이 쿼리는 점수를 제외한 모든 작동합니다. 출력 된 점수는 문장의 수에 실제 점수를 곱한 것입니다. 내 votes 표는 다음과 같습니다

+---------+------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+---------+------------+------+-----+---------+-------+ 
| userid | int(11) | YES | MUL | NULL |  | 
| storyid | int(11) | NO | MUL | NULL |  | 
| vote | tinyint(4) | NO |  | NULL |  | 
+---------+------------+------+-----+---------+-------+ 

vote 1 또는 하나의 값을 포함 -1.


실제 점수를 받으려면 어떻게 쿼리를 수정해야합니까?

+2

일부 샘플 데이터로 sqlfiddle을 만들 수 있습니까? – xception

+0

@xception - 예, 이제 시작하겠습니다 ... – jeff

+0

@xception - 신경 쓰지 마세요. 끝나기 전에 질문에 답을 얻었습니다. 그래도 다음 SQL 질문에 대해서는 그렇게 할 것입니다. – jeff

답변

3
SELECT st.* , u.username creator, COUNT(DISTINCT se.sentenceid) AS sentences, 
    COALESCE((SELECT SUM(v.vote) 
      FROM votes v 
      WHERE st.storyid = v.storyid), 0) score, 
    GROUP_CONCAT(se.text ORDER BY se.sentenceid SEPARATOR ' ') text 
FROM stories st 
JOIN sentences se ON st.storyid = se.storyid 
LEFT OUTER JOIN users u ON st.creatorid = u.userid 
GROUP BY st.storyid 
LIMIT 30 

각 스토리는 많은 문장과 다수 표를 가질 수 있으므로 가능한 모든 조인을 곱하여 데카르트 제품을 얻게됩니다.

관련 문제