MySQL ORDER BY FIELD with%

时间:2012-03-29 01:04:46

标签: mysql sorting sql-order-by

我正在尝试使用通配符使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显示第二,等等。

非常感谢您提供的任何帮助。

谢谢!

2 个答案:

答案 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')

See Source: ORDER BY SPECIFIC VALUE