MYSQL按大小写顺序、列顺序

MYSQL按大小写顺序、列顺序,mysql,laravel,Mysql,Laravel,对不起英语 我的数据库中有一个名为“order_news”的专栏,我正试图按照顺序显示数据 示例数据: ------------------------ id | title | order_news ------------------------- 1 | news 1 | 0 -------------------------- 2 | news 2 | 1 -------------------------- 3 | news 3 | 2 ------------

对不起英语

我的数据库中有一个名为“order_news”的专栏,我正试图按照顺序显示数据

示例数据:

------------------------
id | title    | order_news
-------------------------
1  | news 1   | 0
--------------------------
2  | news 2   | 1
--------------------------
3  | news 3   | 2
---------------------------
4  | news 4   | 3
-------------------------
我的代码,我正在使用Laravel:

News::orderByRaw(
        "
        CASE 
         WHEN order_news = 1 THEN 1
         WHEN order_news = 2 THEN 2
         WHEN order_news = 3 THEN 3

         WHEN order_news = 0 THEN 1
         WHEN order_news = 0 THEN 2
         WHEN order_news = 0 THEN 3
       END
        DESC,
       created_at DESC
       "
     )
   ->take(3)
   ->get();
嗯。如果位置1、2、3不存在。位置0占据丢失的位置

例如:

  • 如果1无出口=0-2-3(新闻1、新闻3和新闻4)
  • 如果2没有退出=1-0-3(新闻2、新闻1和新闻4)
  • 如果3不退出=1-2-0(新闻2、新闻3和新闻1)
  • 用我的代码,1。二,。只工作3分钟。返回1-0-2,我想要1-2-0。
    你能帮我吗?tnx.

    作为一个起点,在相同条件下(
    当order\u news=0时…
    )具有多个
    案例没有多大意义;其中只有一个将被使用

    事实上,
    当order\u news=0时…
    表达式是导致此问题的原因。当您检索标题为
    s
    news 2
    news 3
    news 1
    的项目时,您会得到以下信息:

    title    order_news   your order clause            your order value
    news 2   1            WHEN order_news = 1 THEN 1   1
    news 3   2            WHEN order_news = 2 THEN 2   2
    news 1   0            WHEN order_news = 0 THEN 1   1
    
    因为
    news 2
    news 1
    获得相同的顺序值(
    1
    ),它们都位于
    news 3
    之前。因此,您得到的是
    order\u news
    1-0-2
    ,而不是
    1-2-0


    你的问题并不清楚你到底想要什么,但很明显,你目前的
    案例
    陈述无法让你达到目的。为了避免这种情况,只需按新闻的顺序排列,或者根本不设置明确的顺序。您当前的
    案例
    语句已经一团糟,无法扩展。

    请发布您的整个查询和一些示例数据。很难说出你在问什么。请重新表述你的问题,提供一些示例数据和预期输出。@EdCottrell我已经编辑了一些,现在你明白了吗?