One*_*erd 8 php mysql sql sql-order-by
我有一个像这样的查询:
SELECT
title, desc, date
FROM
tablename
ORDER BY
date ASC, title ASC;
Run Code Online (Sandbox Code Playgroud)
当数据实际有日期时工作正常.问题是,日期提交是可选的,所以我有时会将稿件作为日期,这会产生令人遗憾的效果,即将所有未提交的行放在最前面.
所以,我接着尝试了这个:
SELECT
title, desc, date
FROM
tablename
ORDER BY
date DESC, title ASC;
Run Code Online (Sandbox Code Playgroud)
哪种工作,但不是真的 - 所有带日期(非0000-00-00)的项目都按降序列出,然后是所有带有0000-00-00的项目.
我想做的是按日期排序ASC,标题ASC,但只有日期!= 0000-00-00,但如果日期是= 0000-00-00,那么只是ORDER BY标题ASC那些(我想我解释正确).
我能想到的唯一方法是基于非SQL(两个查询,或者,每个查询只填充一个内存数组,然后我使用PHP排序).
是否有可以执行此操作的SQL查询?
你的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
Run Code Online (Sandbox Code Playgroud)
这在本例中可能不是很有用,但对于复杂的查询,UNION可以派上用场。