Mysql ORDER BY using date data row

空扰寡人 提交于 2019-12-23 08:05:16

问题


I have a query something like this:

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

Works fine when the data actually has a date. Issue is, date submission is optional, so I sometimes get 0000-00-00 as a date, which has the unfortunate effect of placing all nondated rows on top.

So, I then tried this:

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

Which sort of works, but not really -- all items with dates (non 0000-00-00) get listed in descending order, followed by all items with 0000-00-00.

What I want to do is order by date ASC, title ASC, but only if the date != 0000-00-00, but if date is = 0000-00-00, then just ORDER BY title ASC on those (I think I explained that correctly).

The only ways I can think to do this are non-SQL based (either 2 queries, or, each query just populates an in-memory array, and then I sort using PHP).

Is there a SQL query that can do this?


回答1:


Your 2 query solution is a good one, you can do it all in SQL using the UNION command.

The first query will be for dates that are non-zero, then UNION in the query for dates that are zero.

Edit: Something like:

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

This may not be very useful in this instance, but for complex queries, UNION can come in handy.




回答2:


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


来源:https://stackoverflow.com/questions/880430/mysql-order-by-using-date-data-row

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!