Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ORDER BY FIELD()和重复数据_Mysql - Fatal编程技术网

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
时,它们往往排在第一位。