2011-01-22 49 views
1

我不知道標題是說得對,最有可能它沒有:)如何通過自定義規則進行訂購,例如如何訂購像4,2,1,3

所以我有products表,我想按季節訂購他們是爲了。如果'春天'是1,'夏天'-2,'秋天'-3和'冬天'-4,我怎麼能這樣命令它們,所以它首先顯示'夏天',然後'春天' ,然後是「冬天」,最後是「秋天」。就像2,1,4,3一樣。

爲了澄清它,我希望能夠改變規則。它可能是2,1,4,3或4,2,1,3等,這是爲了展示季節性產品。

希望解釋有助於解決問題。歡迎任何解決方案。數據庫是MySQL,語言PHP。

回答

3

創建一個「季節」ID字符串。然後按字段順序執行命令:

SELECT * FROM foo ORDER BY FIELD(season_id, 4, 2, 1, 3); 

用插值php變量替換4,2,1,3部分。

9

這應該爲所有主要DBMS的工作:

order 
    by case when season = 2 then 1 
      when season = 1 then 2 
      when season = 4 then 3 
      when season = 3 then 4 
     end; 

你也可以添加一列到你的季節表來表示他們應該如何進行排序:

table season(
    season_id int 
    ,ordinal int 
); 


select ... 
    from tab t 
    join seasons s on(t.season_id = s.season_id) 
order 
    by s.ordinal; 

...或者,如果你覺得你可以使用不可移植的代碼:

order by field(season_id, 2,1,4,3);