我正在构建一个在线调查系统,希望为其生成统计数据。我想根据用户的性别进行查询。我有以下表格:


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/

10-16 07:44