我正在执行一个显然在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()
的关联值。如何修改此查询以执行我想要的操作?或者如果有人有更好的方法,请告诉我。
感谢任何帮助。
如果您想知道DATE_ADD()
中存在DATE_SUB()
的原因,那就是让查询在今天工作。
答案 0 :(得分: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
答案 1 :(得分: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;