我有一个有问题和答案的表,问题有一个主题字段,问题本身,答案在主题字段上有一个NULL。有一个描述字段用作问题中的文本和该问题的答案 每一行都有一个字段来确定它是一个问题还是答案,parent_id字段如果为0表示它是一个问题,如果让我们说1表示它是一个答案。
示例:
id | subject | description | parent_id
1 How old are you? Tell us your age. 0
2 (NULL) 40 1
3 (NULL) 30 1
4 Where are you born? Tell us the place you
are from.
5 (NULL) USA 4
依此类推,我想要完成的是获得每个问题的所有回复数量。我的结果集就是这个
subject | replies
How old are you? 2
Where are you born 1
我尝试了这个但是不行,任何帮助都会受到赞赏。
SELECT q.subject, COUNT(q.parent_id) as replies FROM question q WHERE q.parent_id = 0 GROUP BY q.subject
似乎两个问题是否相同然后我会将它们组合在一起并在每个问题具有单独且不同的ID时增加回复列值!
答案 0 :(得分:0)
您必须两次查询同一个表。有一次是问题,另一次是答案:
select q.id, q.subject, count(1) as replies
from questions q, questions a
where q.subject is not null and a.parent_id = q.id
group by 1.id, 1.subject
但正确的做法是将问题和答案放在单独的表格中。
答案 1 :(得分:0)
首先,删除GROUP BY,因为每个parent_id只返回1个响应
答案 2 :(得分:0)
正如之前的回复中所提到的,最佳做法是有2个表 - 问题和答案。
如果你决定走这条路......
表1 - id(pk),问题,描述
表2 - id(pk),answer,question_id(fk)
SELECT DISTINCT questions.subject, COUNT(answers.question_id) AS replies
FROM questions, answers
WHERE answers.question_id = questions.id
GROUP BY questions.subject
ORDER BY replies DESC