我有3张桌子
1)question
2)options
3)answers
表1列出了多项选择题。表2包含该问题的多个选择。
考虑一个例子,我有一个问题:“您最喜欢哪个游戏?”
它存储在ID为1的表1中。对于此问题,表2中有3个选择;表2中有3个选择。分别是ID为1,2和3的“板球”,“足球”,“网球”。
当用户回答此问题时,问题ID和选项ID就像他选择了足球一样存储在第三张表中,表3中的输入是问题ID和选项ID。
如果另一个用户选择相同的选项,则新条目将存储在表3中。
我需要获得表3中每个选项的计数。
考虑有10位用户选择板球,有15位用户选择足球,没有用户选择网球,因此我需要算为10,15,0及其相应的选项ID
表名:问题
--------------------------------
| id | question |
--------------------------------
| 1 | which game u like most |
表名称:选项
------------------------------------------------
| id | qid | option_name |
------------------------------------------------
| 1 | 1 | cricket |
------------------------------------------------
| 2 | 1 | football |
------------------------------------------------
| 3 | 1 | tennis |
------------------------------------------------
表名称:答案
--------------------------------------------
| id | qid | optionId |
--------------------------------------------
| 1 | 1 | 3 |
---------------------------------------------
| 2 | 1 | 3 |
----------------------------------------------
| 3 | 1 | 2 |
----------------------------------------------
上表意味着,有2个人选择网球,有1个人选择足球,而没有人选择板球。所以我需要结果表为
------------------------------------------------------
| id | question | option_name | count |
------------------------------------------------------
| 1 | which game u like most | cricket | 0 |
-------------------------------------------------------
| 2 | which game u like most | football | 1 |
-------------------------------------------------------
| 3 | which game u like most | tennis | 2 |
-------------------------------------------------------
但是当我尝试时,我没有得到板球的计数,因为没有人选择板球。我必须将板球的计数设为0。有人可以帮助我解决此问题吗?我的SQL代码是
SELECT count(an.optionId) count , op.option_name, q.question from
questions q, options op, answers an where q.id=1
and q.id=op.qid
and op.id=an.optionId
group by q.question, op.option_name
只需使用LEFT JOIN
和COALESCE()
:
SELECT COALESCE(count(an.optionId),0) as count , op.option_name, q.question from
questions q
INNER JOIN options op
ON(q.id=op.qid )
LEFT OUTER JOIN answers an
ON(p.id=an.optionId)
where q.id=1
group by q.question, op.option_name
请避免使用隐式联接语法(逗号分隔),而仅使用联接的正确语法!LEFT JOIN
隐式语法变得更加难以阅读,更容易产生错觉。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句