我正在构建一个在线调查系统,希望为其生成统计数据。我想根据用户的性别进行查询。我有以下表格:
survey_question_options
survey_answer
使用者
我构造了以下查询,以便在没有问题答案的情况下返回空响应:
SELECT COUNT(sa.option_id) AS answer , so.option_label
FROM survey_answer sa
RIGHT JOIN survey_question_options so
ON sa.option_id = so.option_id AND
sa.record_date>='2011-09-01' AND
sa.record_date<='2012-08-01'
LEFT JOIN users u
ON (sa.uid = u.uid AND u.gender='F')
WHERE so.question_id=24
GROUP BY so.option_label
ORDER BY so.option_id ASC
我的查询返回以下结果集:
0 Red
1 Yellow
0 Blue
0 Green
但是,左联接中的性别条件在查询中似乎被忽略。当我将性别更改为“ M”时,将返回相同的结果。但是,所有的预期结果都是0。
我不确定我要去哪里。请帮忙。
提前致谢。
最佳答案
在联接到答案表之后评估与用户表的左联接-因此,尽管如果用户性别错误,则不返回用户记录,但将返回答案记录(无论用户的性别如何)。尝试:
SELECT COUNT(sa.option_id) AS answer , so.option_label
FROM (select a.option_id
from survey_answer a
JOIN users u ON a.uid = u.uid AND u.gender='F'
where a.record_date>='2011-09-01' AND
a.record_date<='2012-08-01') sa
RIGHT JOIN survey_question_options so
ON sa.option_id = so.option_id
WHERE so.question_id=24
GROUP BY so.option_label
ORDER BY so.option_id ASC
关于php - 跨多个表的SQL连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9293093/