假设我有以下问题。
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'
等。
答案 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'
,然后所有其他行(ASC
或DESC
)使用此行:
SELECT stringdata
FROM table
ORDER BY FIELD( stringdata, 'pl','mg', 'nk', 'tg') DESC
, stringdata ASC --- or DESC