抱歉英语。
我的数据库中有一个名为" 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。和2.工作,但3.返回1-0-2,我想1-2-0。 可以帮我? TNX。
答案 0 :(得分:1)
作为一个起点,对于相同条件(CASE
),多个WHEN
的{{1}}没有多大意义;只会使用其中一个。
事实上,WHEN order_news = 0 THEN ...
表达式是导致此问题的原因。当您使用WHEN order_news = 0 ...
s title
,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_news
,而不是1-0-2
。
你的问题并不清楚你究竟想要什么,但很明显你当前的1-2-0
声明不会让你到达那里。要解决这个问题,只需按CASE
排名,或者根本不设置明确的排序。你当前的order_news
声明已经很乱了,而且它不可扩展。