我知道 ORDER BY FIELD(fieldname, value1, value2, ..., valueN)
功能。
我怎么能不按特定值,而是按“相似”值(如果有的话)排序结果?
例子:
这是table
--------------------
| ID | DESCRIPTION |
--------------------
| 1 | Hello |
| 2 | World |
--------------------
我想点菜 DESCRIPTION like 'Wo%'
,比其他的
在“伪代码”中,类似于:
SELECT DESCRIPTION
FROM table1
ORDER BY FIELD(DESCRIPTION, 'Wo%') DESC
预期结果是:
----------------
| DESCRIPTION |
----------------
| World |
| Hello |
----------------
此代码不起作用 value1, ..., valueN
应为精确的字段值。
3条答案
按热度按时间cbjzeqam1#
我们可以在order by子句中使用表达式,例如:
表达式
t.description LIKE 'Wo%'
将计算为0、1或null。所以空值description
将最后排序,满足条件的值将首先排序(因为我们已经指定DESC
按降序排序。更便携、更符合ansi标准的等效标准是:
如果我们能省略那一秒
WHEN
就这么做吧ELSE 0
,这将使我们的行为与descrption
.如果我们不喜欢“foo-like-bar”在
ORDER BY
子句中,我们可以将其 Package 在一个mysql函数中,以使将来的读者更加清楚,同样,这里的关键是我们可以在
ORDER BY
条款。对于测试,我们可以在select列表中包含相同的表达式,这样我们就可以“看到”(在返回的结果中)这些表达式的计算结果。但是请注意,没有要求ORDER BY
必须出现在SELECT
列表。huwehgph2#
试试看
kpbpu0083#
你可以计算排名
Select
条款,根据您的要求LIKE%%
要求。可以使用if()函数或case-when语句。如果是单
LIKE%%
需求,if()可以使用,else case when。现在,你可以根据排名排序结果。
note:as answered 通过@spencer7593,你也可以这样做
CASE WHEN
在ORDER BY
子句本身,而不是首先在select子句中显式计算它们。请尝试以下操作:
如果有多个
LIKE%%
条件下,可以使用以下选项: