MYSQL查询将一些行放在结果的开头';大堆

MYSQL查询将一些行放在结果的开头';大堆,mysql,Mysql,我正在寻找关键字或查询,以便在fetch数组的顶部生成一些行 假设我有一些带有验证日期的数据。我想用这样的东西按日期订购 Select * from items_table ORDER BY validation_date DESC [ [validation_date => 0000-00-00,id => 2], [validation_date => 2020-06-04,id => 3], [validation_date => 2005-03-04,id

我正在寻找关键字或查询,以便在fetch数组的顶部生成一些行

假设我有一些带有验证日期的数据。我想用这样的东西按日期订购

Select * from items_table ORDER BY validation_date DESC
[
[validation_date => 0000-00-00,id => 2],
[validation_date => 2020-06-04,id => 3],
[validation_date => 2005-03-04,id => 1]
 ]
但是,我希望验证日期等于0000-00-00的一些数据显示在结果数组的顶部

为了继续,我希望第一行是0000-00-00的数据,然后是按验证日期排序的项目。像这样花哨的东西

Select * from items_table ORDER BY validation_date DESC
[
[validation_date => 0000-00-00,id => 2],
[validation_date => 2020-06-04,id => 3],
[validation_date => 2005-03-04,id => 1]
 ]
我有一些想法需要解决,如: 执行两个查询,第一个查询检索date_validation=0000-00-00的数据,检索除结果“where date_validation!=0000-00-00”之外按日期排序的其他项,然后合并两个数组。(2个SQL查询和一个合并函数)

我可以在客户端订购我的结果,但我认为这会白白消耗一些浏览器资源。(1个sql查询和一个排序函数)

我不相信这些不同的方式

我相信有一种方法可以只用SQL查询就可以做到这一点

顺便说一句,如果你有一个关于雄辩框架的答案,它将点亮。但是,如果能用SQL查询得到一个答案,那就太好了,我将不会有任何问题要用雄辩的FW获得同等的答案

祝你今天愉快

在回答以下问题后编辑雄辩的解决方案:

你需要雄辩地否认你的“SQL案例”和秩序

Item::select()->orderByRaw("CASE WHEN validation_date = '0000-00-00' THEN 1 ELSE 0 END DESC")->orderBy("validation_date","DESC")->get();

尝试使用
大小写
表达式进行排序:

SELECT *
FROM items_table
ORDER BY
    CASE WHEN validation_date = '0000-00-00' THEN 0 ELSE 1 END,
    validation_date DESC;

这种两级排序首先将所有
0000-00-00
验证日期记录放在所有其他日期记录之前。然后,在这两个组中,它按验证日期进行第二次排序,以在非
0000-00-00
记录中保持您想要的原始顺序。

谢谢,伙计,这正是我要找的。我需要更多地了解SQL。。。