2011-03-07 60 views
1

我在我的表中有一個字段「星星」。mysql排序位

1 means ** 
2 means *** 
4 means **** 

現在他們可以像3意味着2.5和6意味着3.5星。它只是兩個相鄰的值,所以像5不能發生。 這與輸出效果很好。現在的問題是分揀。現在我只是和場上的明星們分道揚。。顯然,這並不正常工作,因爲正確的順序是這樣的:

2.5stars, 3stars, 3.5stars 

但這些意味着:

3,2,6 

全面正確的排序是這樣的:

1,3,2,6,4,12,8,24,16 

我有一個pagebrowser與限制和篩選一切,所以我不想選擇所有行和手動排序。有沒有辦法在我的查詢中直接進行這種排序?

編輯:

需要明確的是,這個來自按位..

00001 = ** 
00010 = *** 
00011 == 2.5* 
00100 = **** 
+6

爲什麼不把它作爲一個整數存儲?我看不出爲什麼你甚至想要做這樣的事情? – ircmaxell 2011-03-07 14:39:55

+0

瘋狂的想法,但爲什麼不只是解決問題的來源(奇怪的1 = 2星,2 = 3開始等設置),而不是使用一些模糊的排序「修復」。 – 2011-03-07 14:40:43

+0

這來自cms,不能真正改變它 – Flo 2011-03-07 14:42:59

回答

2

它不漂亮,但你可以給這個一杆。

SELECT x FROM y WHERE z 
ORDER BY 
CASE stars 
    WHEN 1 THEN 1 
    WHEN 3 THEN 2 
    WHEN 2 THEN 3 
    WHEN 6 THEN 4 
    WHEN 4 THEN 5 
    WHEN 12 THEN 6 
    WHEN 8 THEN 7 
    WHEN 24 THEN 8 
    WHEN 16 THEN 9 
    ELSE 10 
END CASE 
+0

絕對不漂亮,但我即將建議這一點。同時檢查:http://dev.mysql.com/doc/refman/5.0/en/case-statement.html – 2011-03-07 15:01:07

+0

就像在評論中映射表的解決方案一樣,這既不好也不靈活。如果用戶在後端添加更多元素,則需要在此處添加更多行以進行排序。 – Flo 2011-03-07 15:10:56

+0

+1甚至不知道SQL有CASE。 – Czechnology 2011-03-07 15:14:15