php - 基于日期的 LEFT JOIN 变体

标签 php mysql

我有一系列与“民意调查”相关的表格,它们存储有关他们的信息,他们的答案、投票、风格等。

有一个页面,我在其中显示了关于单个民意调查的所有信息的报告,包括该民意调查的答案、每个答案的票数,甚至是“非事件”答案的票数(那些目前未显示在民意调查中)。为了提取该信息,我使用以下查询:

SELECT answers.id, answers.answer_text, COUNT(polls_results.id) as total
FROM answers LEFT JOIN polls_results
ON answers.id = polls_results.answer_id
WHERE answers.poll_id = ? AND answers.activate = '0'
GROUP BY answers.id

哪里有“?”在准备查询时更改为 ID。此查询返回我需要的所有信息,例如:

[投票名称]

[投票问题]

主动回答

  • 回答 1 [得票数]
  • 回答 2 [得票数]
  • 回答 3 [得票数]

无效答案

  • 回答 4 [得票数]
  • 回答 5 [得票数]

现在,关于问题本身,报告有一个选项可以根据日期范围过滤答案,可以是开始日期、结束日期或两者兼而有之,发生这种情况时,查询会更改,仅添加以下内容:

进行此更改后,如果有一个答案(无论是有效的还是无效的)零票,查询将不会显示它,这与没有日期范围的查询不同。

我找不到对此的解释,我尝试了这个查询的几个变体,但我相信它工作正常,我只是不明白为什么它会随着日期发生如此巨大的变化。

有没有人知道或知道为什么会发生这种情况?

编辑:

根据要求,这是带有 AND 子句的最终查询

SELECT answers.id, answers.answer_text, COUNT(polls_results.id) as total
FROM answers LEFT JOIN polls_results
ON answers.id = polls_results.answer_id
WHERE answers.poll_id = ? AND answers.activate = '0' 
AND polls_results.date >= ".$startDate." AND polls_results.date <= ".$endDate."
GROUP BY answers.id

最佳答案

polls_results 在 left join 子句中,因此它的主题是包含包含空值的记录....现在当我们将条件放在 where 中时,带有 null 的记录将始终失败,因为在评估连接后应用 where 过滤器, 因此左连接没有意义,它将作为内连接工作。

尝试将此 And 子句放在 Join 条件中,而不是 where 子句....

SELECT answers.id, answers.answer_text, COUNT(polls_results.id) as total
  FROM answers 
  LEFT JOIN polls_results ON answers.id = polls_results.answer_id 
                         AND polls_results.date >= ".$startDate." AND polls_results.date <= ".$endDate."
WHERE answers.poll_id = ? 
  AND answers.activate = '0'
GROUP BY answers.id

关于php - 基于日期的 LEFT JOIN 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279278/

相关文章:

php - wp_query 中的错误? WordPress

php - 像使用一张表一样使用两张表

mysql - 如何使用 MySQL 列出所有重复值?

javascript - 使用带有 href 的 ajax 打开动态 php 页面,无需刷新页面

php - php登录系统中的重定向错误

php - 代码点火器 : create multidimensional array of result

mysql - 仅在一列的 Left Join 上选择 distinct

php - 左连接不显示产品

Javascript console.log() 返回 php 字符串的引用错误

php - 使用 PHP 的 exec() 给出错误 : Fatal: [Errno 2] No such file or directory; did you install