MySQL - 按某个属性排序不是升序或降序

6

假设我有一张关于花卉颜色的表格。是否可以获取这些花卉的列表并按照黄色、蓝色、红色的顺序排序?基本上,我想指定一个值的列表并按照这些值对结果进行排序。是否可行?

3个回答

10

你可以使用FIND_IN_SET函数:

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

或者是 ANSI CASE 语句:

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

2
您可以在颜色表中添加一个sort_order字段,并根据排序要求提供相应的值。在查询中,您可以使用ORDER BY sort_order ASC对其进行排序。
我想您希望根据动态需求而不是显式地针对这三种颜色进行排序。这将使您完全灵活地管理排序顺序。

添加一列如何解决问题,当有时我需要按(黄色,蓝色,红色)排序,有时(蓝色,黄色,红色),有时(红色,黄色,蓝色)... - StackOverflowNewbie
8
“sort_order”字段应存储您需要排序的层次结构。例如,当您想要排序(蓝色,黄色,红色)时,“颜色”和“sort_order”字段的值应如下所示: 蓝色 - 1 黄色 - 2 红色 - 3当您想要排序(红色,黄色,蓝色)时,它们应是这样的:蓝色 - 3 黄色 - 2 红色 - 1这将帮助您在不编辑php代码的情况下修改排序顺序。在高端网站上,您可以提供一个Web页面来管理排序顺序,以便用户/管理员随时更改顺序。 - Deepu S Nath

2
我的选择是使用FIELD(str, str1, str2, ...)函数。
该函数返回str在str1、str2、str3等列表中的索引(位置)。如果未找到str,则返回0。
因此,您可以使用返回值对结果列表进行排序。
ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red')

如果您想反转顺序,只需添加DESC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接