2014-10-28 100 views
2

我有這樣MYSQL的情況下,當

---------------------------------------------------------- 
| userID |  dateTime  | val1 | val2 | 
---------------------------------------------------------- 
| abc  | 2014-10-20 00:00:00 | 21.5 | 18.5 | 
| ijk  | 2014-10-21 00:00:00 | 22.5 | 17.5 | 
| pqr  | 2014-10-22 00:00:00 | 23.5 | 16.5 | 
| xyz  | 2014-10-23 00:00:00 | 24.5 | 14.5 | 
---------------------------------------------------------- 

我想通過dateTimedesc order表由val1asc order排序,並在asc orderval2但如果用戶ID的比賽我想該行的數據表在頂部總是獨立於其他領域。

爲此,我有這樣的

Select * 
from mytable 
order by case 
      when userID = 'abc' then 1 
      else 'ordeyByField' end 'order';  
WHERE orderByField = dateTime or val1 or val2 
For dateTime, order = desc 
     and 
    for val1 or val2, order = asc 

查詢當我與VAL1對其進行排序或VAL2這是很好(因爲順序是ASC),但是當我有日期時間排序它,它顯示了匹配的用戶ID列在最後(因爲順序是desc)。我總是希望頂部匹配的userID行。

我希望我已經解釋了我的要求。如果您需要更多解釋,請告訴我。

在此先感謝

回答

3

你靠近,這是很容易,你認爲這是:-)

Select * 
from mytable 
order by case when userID = 'abc' then 0 else 1 end, dateTime desc, val1, val2; 
+0

完美..這就是我想要的......非常感謝你:) – 2014-10-28 12:20:01

+0

實際上,這就是FIELD()函數的用途! – Strawberry 2014-10-28 12:22:38

+1

@Strawberry:你可以在這裏使用'FIELD(userID,'abc')desc',但只要我們只處理一個值,我就會認爲這只是一個替代方案,沒有更多。然而,有了更多的排名值,FIELD肯定會更適合案例結構。 – 2014-10-28 13:14:12