2014-01-06 46 views
-3

我想排序出現在我的頁面的列值,起初它會尋找活動,然後等待,然後出售,然後即將到來。但它顯示的其他情況。這裏是我的代碼MySQL Field()排序

SELECT 
    * 
FROM custom 
ORDER BY 
    FIELD(status,'Active','Pending','Sold','Upcoming') DESC 
+1

向我們展示一個示例數據集和您想要的輸出。 – Kermit

+0

其顯示在第一時間出售然後活躍然後待定然後即將到來 –

+1

好的,不要給我們示例數據集。 – Kermit

回答

2

由於這些狀態都是以字母,你應該能夠做到

SELECT * FROM custom ORDER BY status ASC 
+0

它不起作用 –

+0

@AmirHossain你可以嘗試放置一個http://sqlfiddle.com/來顯示不按預期工作。這裏有一些缺失的數據,這不能解決問題。 – amaster

+4

@AmirHossain *什麼是不工作?也許如果你向我們展示了你想要的東西,我們可以做得更好*幫助你。 – Kermit

6

雖然這是事實,ORDER BY Status應該工作,在理論上,因爲目前您想要的順序發生是按字母順序排列的,並且暫時忽略不清楚「它沒有工作」是什麼意思,更可擴展的方法是使用CASE表達式。

ORDER BY CASE Status 
    WHEN 'Active' THEN 0 
    WHEN 'Pending' THEN 1 
    WHEN 'Sold'  THEN 2 
    WHEN 'Upcoming' THEN 3 
END DESC; 

更具前景的解決方案將是一個ID,名稱和序列的狀態表。您在查詢中加入該表,然後按順序排序。然後,如果您稍後決定以不同順序請求數據,則可以更改序列,並且稍後可以輕鬆地添加更多狀態類型,而無需觸及查詢。另外它可以讓你存儲id而不是字符串,讓你在相同的空間存儲更多的數據。

+3

RESPEK!很好的工作在MySQL問題 – swasheck

+3

黃金[標籤:MySQL]徽章在任何時間! – Kermit