Mysql ORDER BY使用日期数据行

时间:2009-05-19 00:24:26

标签: php sql mysql sql-order-by

我有一个像这样的查询:

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

当数据实际上有日期时工作正常。问题是,日期提交是可选的,所以我有时会将EA作为日期,这会将所有未过时的行放在最上面。

所以,我接着尝试了这个:

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

哪种作品,但不是真的 - 所有带日期的项目(非内容)都按降序排列,然后是所有带有0000-00-00的项目。

我想要做的是按日期排序ASC,标题ASC,但只有日期!= 0000-00-00,但如果日期是= 0000-00-00,那么只是ORDER BY标题ASC那些(我想我正确地解释了这一点。

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

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

2 个答案:

答案 0 :(得分:9)

ORDER BY date = '0000-00-00' ASC, date ASC, title ASC

答案 1 :(得分:4)

您的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可以派上用场。