ORDER BY FIELD()和重复数据

时间:2011-07-05 08:22:04

标签: mysql

假设我有以下问题。

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'

到目前为止,使用ORDER BY Fields()只是对一个数据实例进行排序,而不是全部。

在查询中使用desc代替asc按预期工作。我在第一行收到'pl',然后'mg''nk'等。

2 个答案:

答案 0 :(得分:2)

通常FIELD中的ORDER BY子句与

类似
SELECT * FROM table ORDER BY FIELD(field, high_priority, second_high,
               ,....., low_priority);

因此,在您的查询中,排序发生在您提到的时间,当您从Lowest_priority打印出ASC时。因此,对于您的情况,如果您希望tg位于顶部,则可以在FIELDS中重新排序优先级,或者您已经尝试过使用desc

答案 1 :(得分:0)

如果您希望第一行包含'tg',那么带有....的行然后带有'pl',然后所有其他行(ASCDESC)使用此行:

SELECT stringdata 
FROM table 
ORDER BY FIELD( stringdata, 'pl','mg', 'nk', 'tg') DESC
       , stringdata ASC        --- or DESC