2

我正在执行一个显然包含 MySQL 子查询的查询。

让我直接进入代码:

SELECT DATEDIFF(CURDATE(), 
(SELECT due FROM checkOut JOIN People ON checkOut.p_id = People.p_id
 WHERE CASE WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
 >= checkOut.checkTime THEN 1 ELSE 0 END ORDER BY checkOut.due)
 );

主要查询是SELECT DATEDIFF(). 其中是我的子查询,它实质上是在表中搜索以根据时间间隔查找过期的项目。我知道查询将返回多行,并且它不适用于我目前的设置方式。

我想要的是从我的返回多个值SELECT DATEDIFF(),以便我以后可以用 php 循环它。详细地说,我希望子查询中返回的每一行都具有来自DATEDIFF(). 如何修改此查询以执行我想要的操作?或者如果有人有更好的方法,请告诉我。

任何帮助表示赞赏。

如果您想知道为什么在 中存在 a DATE_ADD()DATE_SUB()那么只需使查询适用于今天。

4

2 回答 2

3

去掉子查询,可以直接计算差值。

SELECT  DATEDIFF(CURDATE(), due), due 
FROM    checkOut JOIN People 
            ON checkOut.p_id = People.p_id
WHERE   CASE 
           WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
                    >= checkOut.checkTime 
           THEN 1 
           ELSE 0 
        END 
ORDER BY checkOut.due
于 2012-11-05T06:37:02.737 回答
0

将子查询用作表。例如下面:

SELECT DATEDIFF(CURDATE(), d.due)
FROM 
 (SELECT due FROM checkOut JOIN People ON checkOut.p_id = People.p_id
  WHERE CASE WHEN DATE_SUB(date_add(CURDATE(),INTERVAL 4 MONTH), INTERVAL 3 MONTH) 
       >= checkOut.checkTime THEN 1 ELSE 0 END ORDER BY checkOut.due) 
  ) AS d;
于 2012-11-05T06:37:00.810 回答