我有一个3列的表:
| 身份证|姓名|优先权|
| - ------|- ------|- ------|
| 1个|核心|十个|
| 第二章|核心|九|
| 三个|其他|八个|
| 四个|板|七|
| 五个|板|六个|
| 六个|核心|四个|
我想使用priority
对结果集进行排序,但首先是那些具有name=core
的行,即使它们的优先级较低。
| 身份证|姓名|优先权|
| - ------|- ------|- ------|
| 六个|核心|四个|
| 第二章|核心|九|
| 1个|核心|十个|
| 五个|板|六个|
| 四个|板|七|
| 三个|其他|八个|
8条答案
按热度按时间p1iqtdky1#
还有MySQL
FIELD
函数。如果要对所有可能的值进行完整排序:
如果你只关心"核心"是第一位的,其他的价值观并不重要:
如果要先按"核心"排序,然后按正常排序顺序对其他字段进行排序:
不过,这里有一些警告:
首先,我非常确定这是mysql独有的功能问题被标记为mysql,但你永远不知道。
其次,注意
FIELD()
是如何工作的:它返回值的 * 从1开始的索引 *-在FIELD(priority, "core")
的情况下,如果"core"是值,它将返回1。如果字段的值不在列表中,它将返回 * zero *。这就是为什么DESC
是必要的,除非你指定了所有可能的值。waxmsbnn2#
一般你可以做
特别是在MySQL中,您还可以
由于MySQL中的比较结果是
0
或1
,因此您可以按该结果进行排序。carvr3hs3#
给特定行给予优先级的一种方法是给它们的优先级添加一个较大的数字。可以使用
CASE
语句来实现这一点:演示版:http://www.sqlfiddle.com/#!2/753 ee/1
a11xaf1n4#
这对我使用Postgres 9+有效:
cmssoen25#
一种方法是这样的:
3yhwsihp6#
oyxsuwqo7#
执行以下操作:
附加+0意味着:
变成:
ryoqjall8#
使用此选项: