Mysql ORDER BY FIELD()和重复数据
假设我有以下问题Mysql ORDER BY FIELD()和重复数据,mysql,Mysql,假设我有以下问题 SELECT stringdata FROM table ORDER BY FIELDS( stringdata, 'tg','nk','mg','pl') asc; 出于某种原因,我从最底层得到了结果。如何让查询将从“tg”开始的结果放在第1行,而不是结果中的最后一行 不仅如此,数据中还有不止一个“tg”,我希望它能在这个预期输出中进行排序: stringdata __________ 'tg' 'tg' 'tg' 'nk' 'nk' '
SELECT stringdata FROM table ORDER BY FIELDS( stringdata, 'tg','nk','mg','pl') asc;
出于某种原因,我从最底层得到了结果。如何让查询将从“tg”开始的结果放在第1行,而不是结果中的最后一行
不仅如此,数据中还有不止一个“tg”,我希望它能在这个预期输出中进行排序:
stringdata
__________
'tg'
'tg'
'tg'
'nk'
'nk'
'mg'
'mg'
'mg'
'pl'
到目前为止,使用orderbyfields()
只对数据的一个实例进行排序,而不是对所有实例进行排序
在查询中使用
desc
而不是asc
可以正常工作。我在第一行得到'pl'
,然后是'mg'
,'nk'
,等等。通常ORDER BY中的字段
子句的工作方式如下
SELECT * FROM table ORDER BY FIELD(field, high_priority, second_high,
,....., low_priority);
因此,在您的查询中,排序是按照您提到的那样进行的,当您给ASC
时,它从最低的\u优先级打印出来。因此,对于您的情况,如果您想将tg
放在顶部,您可以在字段中重新排序优先级
,或者您已经尝试过使用desc
如果您希望第一行带有'tg'
,然后是带有。。。。然后使用'pl'
和所有剩余排序(ASC
或DESC
)使用以下命令:
SELECT stringdata
FROM table
ORDER BY FIELD( stringdata, 'pl','mg', 'nk', 'tg') DESC
, stringdata ASC --- or DESC
问题是,如果我没有定义所有可能的字段(stringdata、'tg'、'etc'),ASC就会一直推到底。而我没有定义的是第一个结果。@Tek:那是因为你没有定义的被认为是优先级最低的,所以在排序ASC
时,它们往往排在第一位。