我有这样的查询:
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查询?
您的2查询解决方案是一个很好的解决方案,您可以使用以下UNION命令在SQL中完成所有操作。
UNION
第一个查询将查询非零日期,然后查询中的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可能会派上用场。