我正在尝试使用通配符使ORDER BY FIELD工作,并且不成功:
SELECT positions.*,
departments.dept_name,
departments.dept_url,
divisions.dept_name AS div_name
FROM positions LEFT JOIN departments
ON positions.colleague_dept_code = departments.colleague_code
LEFT JOIN departments AS divisions
ON positions.colleague_div_code = divisions.colleague_code
WHERE colleague_id = '$colleague_id'
ORDER BY FIELD(positions.colleague_position_id, 'A%', 'F%', 'T%', 'S%', 'C%')
colleague_position_id
字段有一个由我们的MIS系统生成的文本ID,我希望以A开头的位置首先显示,F显示第二,等等。
非常感谢您提供的任何帮助。
谢谢!
答案 0 :(得分:2)
这应该让你对它有最大的控制权:
order by
case left(positions.colleague_position_id, 1)
when 'A' then 1
when 'F' then 2
when 'T' then 3
when 'S' then 4
when 'C' then 5
else 6
end, positions.colleague_position_id
这是因为您可以将所有不匹配的值发送到您想要的位置(在本例中为结尾)。对于非匹配值,field()
函数将返回0
,并且会将它们放在结果集的顶部,甚至在以A
开头的值之前。
此外,您也可以像我在示例中所做的那样按positions.colleague_position_id
订购,这样对于以相同字母开头的许多positions.colleague_position_id
,它们仍将按顺序排列。
答案 1 :(得分:0)
如何删除WildCard
?
ORDER BY FIELD(positions.colleague_position_id,'A','F','T','S','C')