MySQL ЗАКАЗАТЬ ПО ПОЛЕ с% - PullRequest
       4

MySQL ЗАКАЗАТЬ ПО ПОЛЕ с%

3 голосов
/ 29 марта 2012

Я пытаюсь заставить 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-системой, и я хотел бы, чтобы позиции, начинающиеся с A, отображали первым, F - вторым и т. Д.

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Это должно дать вам максимальный контроль над ним:

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, начинающихся с одной и той же буквы, они все равно будут в порядке.

0 голосов
/ 29 марта 2012

Как насчет удаления WildCard?

ЗАКАЗ ПО ПОЛЯМ (position.colleague_position_id, 'A', 'F', 'T', 'S', 'C')

См. Источник: ЗАКАЗАТЬ ПО СПЕЦИФИЧЕСКОМУ ЗНАЧЕНИЮ

...