您好,感谢您花时间阅读这个问题。
我正在使用 MySQL,并且我想使用 ORDER BY 将结果排序到一个特定的列,但是必须根据该列的特定条件对结果进行排序。例如,对于下表,我想ORDER BY 'group'
,首先显示9,7,6 'group' items
和,最后显示10,8,5 'group' items
:
names group
--------- ------
susanita 10
miguelito 5
mafalda 7
manolito 8
libertad 6
felipe 9
guille 8
提前致谢。
我获取了您的示例数据,将其加载到名为 mytable 的表中并运行它。
结果如下:
试试看 !!!
更新 2011-09-06 12:33 EDT
这是另一种方法:
这将强制 9、7、6、10、8、5 以外的任何组出现在查询的最底部。
更新 2011-09-06 14:39 EDT
嘿@Nick,你的也适用于我的样本数据!
使用 MySQL 的
find_in_set()
函数来执行此操作。它比gbn 提出 的CASE 方法更简洁,但可移植性较差。例如:
因为它依赖于字符串搜索,
find_in_set()
所以主要用于对一小组易于搜索的键(如整数)进行排序。通常(在 SO 中每天都会询问)您会使用标准 SQL 的 CASE
我很想看看这在大型数据集上与 RolandoMySQLDBA 的 LOCATE(CONCAT...) 方法的比较
有关更复杂的示例,请参阅ORDER BY CASE 表达式的“转换失败”错误
您可以将其创建为ENUM类型。
因此,将 ENUM 字段创建为
ENUM('9','7','6','10','8','5')
免责声明:我不赞同这一点,因为我怀疑您的
group
专栏需要是动态的。我只是提到它作为一种选择。