8

我有一个这样的查询:

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

当数据实际上有一个日期时工作正常。问题是,日期提交是可选的,所以我有时会得到 0000-00-00 作为日期,这会产生将所有未注明日期的行放在最上面的不幸效果。

所以,我然后尝试了这个:

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

哪种有效,但不是真的 - 所有日期(非 0000-00-00)的项目按降序列出,然后是所有 0000-00-00 的项目。

我想要做的是按日期 ASC、标题 ASC 排序,但前提是日期!= 0000-00-00,但如果日期 = 0000-00-00,那么只需按标题 ASC 排序(我想我正确解释)。

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

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

4

2 回答 2

9
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC
于 2009-05-19T00:29:57.237 回答
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可以派上用场。

于 2009-05-19T00:32:07.483 回答