Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“MySQL”或“不工作”_Sql_Mysql - Fatal编程技术网

“MySQL”或“不工作”

“MySQL”或“不工作”,sql,mysql,Sql,Mysql,我要执行此查询: SELECT * FROM mail WHERE tag_draft = 0 AND (target_id = 2 OR source_id = 2) GROUP BY created DESC` …但它不返回任何行。现在,如果我执行此查询: SELECT * FROM mail WHERE tag_draft = 0 AND target_id = 2 GROUP BY created DESC …然

我要执行此查询:

  SELECT * 
    FROM mail 
   WHERE tag_draft = 0 
     AND (target_id = 2 OR source_id = 2) 
GROUP BY created DESC`
…但它不返回任何行。现在,如果我执行此查询:

  SELECT * 
    FROM mail 
   WHERE tag_draft = 0 
     AND target_id = 2 
GROUP BY created DESC
…然后工作正常-选择目标id为2的每一行。如果我用源代码替换目标代码,它也可以正常工作。问题是,我想选择目标或源ID为2的行作为示例,但是运行首先声明的查询select*FROM mail where tag_draft=0和target_ID=2或source_ID=2 groupby created DESC

,无论有无内括号,都不会返回任何行。我不明白为什么这不起作用,除了我做了一些错误的或位

一些示例数据:

source_id target_id etc_fields
-------------------------------
2         12        blah
12        2         blah
2         14        blah
2         10        blah
2         2         blah
表中应显示上述所有行。不应显示的内容如下:

source_id target_id etc_fields
-------------------------------
10        8         ...
255       16        ...
4         12        ...

这里有一种方法,假设给定条件下不存在多个具有相同MAXcreated的行:

SELECT m.* FROM mail m WHERE m.tag_draft=0 AND (m.target_id=2 OR m.source_id=2) AND
  m.created = (SELECT MAX(created) FROM mail sm 
       WHERE sm.tag_draft=0 AND (sm.target_id=2 OR smsource_id=2))
或者只是

 SELECT m.id,m.target_id,m,m.source_id,MAX(created) FROM mail m 
    WHERE m.tag_draft=0 AND (m.target_id=2 OR m,source_id=2) 
  GROUP BY m.id,m.target_id,m.source_id

请确保按所选的每一列进行分组(聚合MAXcreated除外),选择*不行。

是否可以尝试将其格式设置得更好一些?将查询放在自己的段落中,缩进4个空格,或选择并单击1010按钮。这将使其格式正确、颜色鲜艳,并且更易于阅读。您能否提供表定义和几行示例数据,以可复制的方式演示问题?这听起来可能很愚蠢,但您确定吗?如果删除GROUP BY子句,会有什么不同?您发布的查询是否与您正在运行的查询完全相同,或者你简化了吗?这看起来很有希望,尽管我是个白痴,并且没有把我的问题说清楚:我拥有的是“线程”,由一个thread\u id列表示,该线程中的所有行都是相同的。我也有线程的创建日期,同样如此。然而,不同的是“更新”字段——这是唯一的。你能改变你的查询,让它像我解释的那样运行吗?或者它已经运行了吗?还有,“m.”和“sm.”是什么意思?它们是不同的表还是什么的?它们只是邮件表的别名。如果更新的列是您想要的,那么在上面的查询中使用该列而不是创建的列还不够吗?@nos-可能是,但如果您理解的话,我想从每个线程中选择最新的帖子,而不是整个表?有点,但这与原始问题有很大的不同。我建议您发布一个新问题,包括实际的表结构和您想要的内容。