mysql 先按特定字段值排序

svgewumm  于 2023-03-07  发布在  Mysql
关注(0)|答案(8)|浏览(195)

我有一个3列的表:
| 身份证|姓名|优先权|
| - ------|- ------|- ------|
| 1个|核心|十个|
| 第二章|核心|九|
| 三个|其他|八个|
| 四个|板|七|
| 五个|板|六个|
| 六个|核心|四个|
我想使用priority对结果集进行排序,但首先是那些具有name=core的行,即使它们的优先级较低。
| 身份证|姓名|优先权|
| - ------|- ------|- ------|
| 六个|核心|四个|
| 第二章|核心|九|
| 1个|核心|十个|
| 五个|板|六个|
| 四个|板|七|
| 三个|其他|八个|

p1iqtdky

p1iqtdky1#

还有MySQL FIELD函数。
如果要对所有可能的值进行完整排序:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")

如果你只关心"核心"是第一位的,其他的价值观并不重要:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC

如果要先按"核心"排序,然后按正常排序顺序对其他字段进行排序:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority

不过,这里有一些警告:
首先,我非常确定这是mysql独有的功能问题被标记为mysql,但你永远不知道。
其次,注意FIELD()是如何工作的:它返回值的 * 从1开始的索引 *-在FIELD(priority, "core")的情况下,如果"core"是值,它将返回1。如果字段的值不在列表中,它将返回 * zero *。这就是为什么DESC是必要的,除非你指定了所有可能的值。

waxmsbnn

waxmsbnn2#

一般你可以做

select * from your_table
order by case when name = 'core' then 1 else 2 end,
         priority

特别是在MySQL中,您还可以

select * from your_table
order by name <> 'core',
         priority

由于MySQL中的比较结果是01,因此您可以按该结果进行排序。

carvr3hs

carvr3hs3#

给特定行给予优先级的一种方法是给它们的优先级添加一个较大的数字。可以使用CASE语句来实现这一点:

select id, name, priority
    from mytable
order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc

演示版:http://www.sqlfiddle.com/#!2/753 ee/1

a11xaf1n

a11xaf1n4#

这对我使用Postgres 9+有效:

SELECT *
FROM your_table
ORDER BY name = 'core' DESC, priority DESC
cmssoen2

cmssoen25#

一种方法是这样的:

select id, name, priority from table a
order by case when name='core' then -1 else priority end asc, priority asc
3yhwsihp

3yhwsihp6#

SELECT * FROM cars_new WHERE status = '1' and car_hide !='1' and cname IN ('Executive Car','Saloon','MPV+','MPV5') ORDER BY FIELD(cname, 'Executive Car', 'Saloon','MPV+','mpv5')
oyxsuwqo

oyxsuwqo7#

执行以下操作:

SELECT * FROM table ORDER BY column `name`+0 ASC

附加+0意味着:

0, 10, 11, 2, 3, 4

变成:

0, 2, 3, 4, 10, 11
ryoqjall

ryoqjall8#

使用此选项:

SELECT * 
FROM tablename 
ORDER BY priority desc, FIELD(name, "core")

相关问题