2011-01-22 44 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);