2011-05-12 97 views
5

说我有一张关联颜色的花朵图表。是否有可能获得鲜花名单,然后通过先订购Yellow,然后再订购Blue,然后订购Red。基本上,我想指定一个值列表并按这些值排序结果。可能?根据排序要求MySQL - 按某种不是ASC或DESC的顺序排列

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 

回答

9

你可以使用FIND_IN_SET:

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

..或在ANSI CASE语句。在查询中,您可以使用ORDER BY sort_order ASC

我期待您要根据动态要求对它们进行排序,而不是明确提到这三种颜色。这将使您可以灵活地管理排序顺序。

2

可以在颜色表中添加一个字段sort_order,并提供价值:

+0

如何添加一列有时需要订购时解决问题(黄色,蓝色,红色),有时(蓝色,黄色,红色),有时(红色,黄色,蓝色),... – StackOverflowNewbie 2011-05-12 07:05:23

+8

' sort_order'字段应该存储您需要排序的层次结构。例如。 (蓝,黄,红), 蓝色 - 1 黄色 - 2 红色 - 3 当您想要排序(红色,黄色,红色)时,颜色值和'sort_order'蓝色) 蓝色 - 3 黄色 - 2 红色 - 1 这将帮助您在不编辑php代码的情况下修改排序顺序。在更高端,您提供了一个Web配置来管理页面中的排序顺序,以便用户/管理员想要更改顺序时。这是如何在高端网站上处理的。 – 2011-05-12 08:14:47

2

我的选择是使用FIELD(str, str1, str2, ...)函数。

返回str1,str2,str3,...列表中 中str的索引(位置)。 如果未找到str,则返回0。

所以,你可以使用返回值命令结果的列表:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

如果你想颠倒顺序,只需添加DESC

相关问题