mysql - 返回具有特定条件的所有行

标签 mysql sql

首先让我给你们SQLFiddle:http://sqlfiddle.com/#!2/1d8bd/11

我已经为此工作了一段时间,并且面临着一些程序员(和作家)的阻碍。

这是我试图在 MySQL 中完成的示例伪代码:

Return all rows WHERE {
  IF `to_user_id` = '27' AND `to_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR) 
     RETURN to_delete as del_time, COUNT(*), MAX(subject),

      - OR -

  IF `from_user_id` = '27' AND `from_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR) )
     RETURN from_delete as del_time, COUNT(*), MAX(subject),
} GROUP BY thread_hash

我实际上是在构建一个私有(private)消息系统,这是代表垃圾箱的查询。具有相同thread_hash 的行表示线程中的一条消息。当用户从他们的收件箱中删除线程时,它会将所有 to_delete 设置为该特定 thread_hashNOW()。当用户从他们的发送箱中删除一个线程时,它会将所有 from_delete 设置为该特定 thread_hashNOW()

如果 to_user_id = $user_id AND to_delete 有一个值,或者如果 from_user_id = $user_id AND from_delete 有一个值,按 thread_hash 分组(即您从收件箱或发件箱中删除的主题)

我希望我在这里说清楚了。如果我能解决其他问题,请告诉我。

最佳答案

你很接近,一个简单的 UNION ALL 应该做你想做的事;

SELECT MAX(del_time), COUNT(*) cnt, MAX(subject) subject FROM (
  SELECT to_delete del_time, thread_hash, subject
  FROM messages
  WHERE to_user_id = 27 AND `to_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR)
  UNION ALL
  SELECT from_delete del_time, thread_hash, subject
  FROM messages
  WHERE from_user_id = 27 AND `from_delete` >= SUBDATE(NOW(), INTERVAL 720 HOUR)
) a
GROUP BY thread_hash;

The modified SQLfiddle for testing .

关于mysql - 返回具有特定条件的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682449/

相关文章:

Php 邮件功能在我的服务器上不起作用

sql - 重构字段的外键

mysql - 更改 SQL 表上的 ondelete 行为

sql - 选择日期列上的 MAX 不适用于空表

c# - 如何进入亚音速?

python - PyQt4 问题和在 Python 中登录 WIndow 到主窗口

php - 数据表 : Using row to columns with php/mysql or else?

php - 将购物袋数据存储到 mysql 数据库中的最有效方法

MYSQL(WHERE - IF - SELECT/IN 语句)

sql - 按多对多关系的第一条记录对表进行排序