2015-03-13 60 views
0

我有一个投票系统以及表如下所示:MySQL的投票系统选择

answers 
----------- 
int id 
text content 

results 
----------- 
int id 
int answers_id 

我想选择这样我就可以看到答案的数目和响应,即使没有投票(结果) 。 我想是这样的:

SELECT 
count(results.answers_id), answers.content 
from answers 
left outer join results 
on answers.id = results.answers_id 
group by results.answers_id 

但它不会与0票(结果)的答案。

+0

COUNT(列)不计NULL(无投票权)。使用count(*)来计算所有 - 包括null! – jarlh 2015-03-13 09:48:51

回答

0

这应该做的工作:

SELECT count(results.answer_id), answers.content 
from answers left outer join results on answers.id = results.answer_id 
group by answers.content; 
0

尝试

SELECT 
count(result.answers_id) as acount, answers.content 
from answers 
left inner join results 
on answers.id = acount 
+0

我不认为如果这将起作用,不应该添加group by子句,如果在select子句中使用聚合函数? – 2015-03-13 09:20:53

0

使用子查询

SELECT a.*, 
    (SELECT COUNT(*) 
    FROM results r 
    WHERE a.id = r.answers_id 
    ) 
FROM answers a 
0

试试这个,对答案的标识分组。

SELECT 
COUNT(results.answers_id) AS NumberOfAnswers, answers.content 
from answers 
left join results 
on answers.id = results.answers_id 
group by answers.id 

要确保你不要有两行内容相同,那么group by answers.content

SELECT 
    COUNT(results.answers_id) AS NumberOfAnswers, answers.content 
    from answers 
    left join results 
    on answers.id = results.answers_id 
    group by answers.content 
0

使用Ifnull,也是你的GROUP BY语句将其更改为answers.content

SELECT 
IFNULL(count(results.answers_id),0), answers.content 
from answers 
left outer join results 
on answers.id = results.answers_id 
group by answers.content 
0

我想解决方案是使用IFNULL

SELECT IFNULL(COUNT(r.answers_id), 0), 
     a.content 
FROM answers AS a 
LEFT JOIN results AS r ON a.id = r.answers_id 
GROUP BY r.answers_id