2011-07-05 67 views
1

可以說我有以下查詢。ORDER BY FIELD()和重複數據

SELECT stringdata FROM table ORDER BY FIELDS(stringdata, 'tg','nk','mg','pl') asc; 

出於某種原因,我得到的結果在最底部。我怎樣才能讓查詢結果從'tg'開始,而不是結果中的最後一行?

不僅如此,但有一個在數據不止一個「TG」,我想它是在期望的輸出進行排序:

stringdata 
__________ 
    'tg' 
    'tg' 
    'tg' 
    'nk' 
    'nk' 
    'mg' 
    'mg' 
    'mg' 
    'pl' 

到目前爲止使用ORDER BY Fields()只是排序的一個實例數據而不是全部。

在查詢中使用desc而不是asc按預期工作。我得到'pl'的第一行上,然後'mg''nk'

回答

2

通常在ORDER BYFIELD子句的工作方式類似

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

所以在您的查詢,排序發生你所說,當你給出了從最低優先級打印的ASC。因此,對於你的情況,如果你在上面要tg,您可以重新排列優先級在FIELDS或者你已經嘗試使用desc

+0

的問題是,如果我不定義所有可能的領域(StringData是「TG」,「等」)的ASC一直推到底部。雖然我沒有定義的那些是第一個結果。 – Tek

+0

@Tek:那是因爲你沒有定義的那些被認爲具有最低的優先級,所以當訂購'ASC'時,他們往往先到達。 – Balanivash

0

如果你想第一排與'tg',然後用行....然後用'pl',然後所有的休息排序(ASCDESC)使用此:

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