【发布时间】:2019-01-20 21:49:49
【问题描述】:
ORDER BY 不适用于存在的地方
我有 ORM 生成的 SQL,但它对数据的排序不正确
SELECT * FROM `users`
WHERE (
EXISTS
(
SELECT *
FROM `passports`
WHERE `users`.`id` = `passports`.`user_id`
AND DATE_ADD(
birth_date,
INTERVAL YEAR(CURDATE())-YEAR(birth_date) + IF(DAYOFYEAR(CURDATE())
> DAYOFYEAR(birth_date),1,0)
YEAR)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
ORDER BY DATE_ADD(
birth_date,
INTERVAL YEAR(CURDATE())-YEAR(birth_date)
+ IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birth_date),1,0)
YEAR
);
)
ORDER BY 不起作用 但子查询排序正确
SELECT *
FROM passports
WHERE DATE_ADD(
birth_date,
INTERVAL YEAR(CURDATE())-YEAR(birth_date)
+ IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birth_date),1,0)
YEAR
)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
ORDER BY DATE_ADD(
birth_date,
INTERVAL YEAR(CURDATE())-YEAR(birth_date)
+ IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birth_date),1,0)
YEAR
);
我的代码有什么问题,如何让它工作
我得到一个未排序的用户数组(第一个查询),但是他们的护照的排序数组按最早的生日排序(子查询),我希望根据子查询规则输出排序的用户数组。
【问题讨论】:
-
能否展示
users和passports的表结构?birth_date是users还是passports的列? -
birth_date 是护照用户列:
|id|name|surname,护照:|id|user_id|birth_date|