一尘不染

MySQL ORDER BY使用日期数据行

sql

我有这样的查询:

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date ASC, title ASC;

当数据实际有日期时,可以正常工作。问题是,日期提交是可选的,因此有时我会以注册日期作为日期,但不幸的是,将所有未日期的行放在顶部。

因此,我尝试了以下方法:

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date DESC, title ASC;

哪种作品有效,但不是真的-所有带有日期(未注册)的项目均按降序排列,其次是所有带有注册日期的项目。

我想做的是按日期排列ASC,标题为ASC,但只有在日期!= 0000-00-00时才可以,但是如果日期为=
0000-00-00,那么只需在这些标题上按ORDER BY标题ASC(我想我正确地解释了)。

我可以想到的唯一方法是基于非SQL的(两个查询,或者每个查询仅填充一个内存数组,然后使用PHP进行排序)。

是否有可以执行此操作的SQL查询?


阅读 268

收藏
2021-05-16

共1个答案

一尘不染

您的2查询解决方案是一个很好的解决方案,您可以使用以下UNION命令在SQL中完成所有操作。

第一个查询将查询非零日期,然后查询中的UNION则查询零。

编辑:

SELECT * FROM tbl 
   WHERE DATE != '0000-00-00' 
   ORDER BY date ASC 
UNION SELECT * FROM tbl
   WHERE DATE = '0000-00-00'
   ORDER BY title ASC

在这种情况下,这可能不是很有用,但是对于复杂的查询,UNION可能会派上用场。

2021-05-16