MySQL-在GROUP BY之后包含更多条件的语法

MySQL-在GROUP BY之后包含更多条件的语法,mysql,sql,Mysql,Sql,我有一个查询,其中列出了问题或博客,或两者兼而有之。问题有答案,博客没有。它们位于同一个表中,具有相同的结构(标题和详细信息),类型名称为“blog”或“question”。答案表是POSTS,并使用问题id作为两个表之间的公共字段 用户界面允许用户选中问题、博客、已回答、未回答的复选框,或在问题文本本身上输入搜索参数 典型的情况是 $type_condition = " AND questions.type='question'"; $type_condition = " AND questi

我有一个查询,其中列出了问题或博客,或两者兼而有之。问题有答案,博客没有。它们位于同一个表中,具有相同的结构(标题和详细信息),类型名称为“blog”或“question”。答案表是POSTS,并使用问题id作为两个表之间的公共字段

用户界面允许用户选中问题、博客、已回答、未回答的复选框,或在问题文本本身上输入搜索参数

典型的情况是

$type_condition = " AND questions.type='question'";
$type_condition = " AND questions.type='blog'";
我的问题是答案条件。我可以做到:

$answer_condition = 'HAVING answers = "0"';//questions with no answers    
$answer_condition = 'HAVING answers > "0"';//questions with answers
$answer_condition = 'HAVING answers > "-1"';//questions with and without answers
但我只希望$answer_条件应用于type='question',而忽略type='blog'。如果只勾选了博客或问题,这不是问题。但是如果两者都被选中,这意味着用户想要列出两者,并且回答/计数条件应该只适用于type=question,而不是type=blog

我想这样做作为一个整体条件:

AND (questions.type='blog' OR (questions.type='question' AND answers ".$answer_condition."))";
但是,我知道GROUP BY之后的位置将不接受此语法,$ANSWERK_条件必须在GROUP BY之后。除了我概述的上述逻辑之外,这些查询都可以工作

SQL:

"SELECT questions.*, count(posts.question_id) as answers
FROM questions
LEFT JOIN posts
ON questions.question_id = posts.question_id  
WHERE question LIKE '%".$search."%'
".$type_condition."
GROUP BY questions.question_id
".$answer_condition."
type=blogs的count/answers字段为0


如何通过SQL实现这一点?

可以通过将“type”条件和“answer”条件移动到查询的HAVING子句来解决此问题。可供选择的办法如下:

  • 问题-
    问题。键入='question'
  • 博客-
    questions.type='blog'
  • 已回答—
    (问题。键入='question'和答案>0)
  • 未回答-
    (问题。键入='question'并回答=0)

如果用户选择了多个复选框,则可以在它们之间附加“或”。

请学习使用正确的
分组方式<代码>选择*分组依据
在大多数系统中都不会执行。您的查询格式不正确。它可能在MySQL 5.7.5或更早版本中工作,因为默认情况下它允许错误的语法。问题是不允许使用。*语法吗?在MySQL 5.6.20中工作。格式如何不正确?使用GROUP BY时,选择列表中的所有字段都需要聚合,或者是要分组的字段之一。这可以防止MySQL为其他列随机选择值。这种行为似乎不会影响这个特定的查询,但必须记住并避免。在较新版本的MySQL中,不允许此查询(除非关闭设置,最好不要这样做)。我最初使用子查询将答案计数计算为答案,但后来意识到我不能以上面描述的方式使用这个新字段。。。除非有办法使用它,我不知道。然后使用count()来执行此操作。当按posts.question_id分组时,它不会捕获我需要的0个计数值,因此我随后按questions.question_id分组,其中确实包含0个计数值。但是现在你说MySQL的新版本不会接受它,我不得不重新考虑这一切。。。