Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка в заданном порядке
 
 автор: Axxil   (23.06.2010 в 10:40)   письмо автору
 
 

Есть запрос:

SELECT * FROM users WHERE user_id IN (22,34,11,9,4)


Как бы сделать так, чтобы сортировка была по полю user_id в том порядке в каком значения идут в условии 22,34,11,9,4 ?

  Ответить  
 
 автор: sms-send   (23.06.2010 в 11:01)   письмо автору
 
   для: Axxil   (23.06.2010 в 10:40)
 

А чем определяется именно такой порядок?
Проще в вызывающем сценарии собрать в массив и обрабатывать в нужном порядке.
Если сильно захочется сделать костыль, но повесить сортировку на СУБД, то:
SELECT *
FROM users
WHERE user_id IN (22,34,11,9,4)
ORDER BY
  CASE `id_new` 
    WHEN 22 THEN 1
    WHEN 34 THEN 2
    WHEN 11 THEN 3
    WHEN  9 THEN 4
    WHEN  4 THEN 5
  END

  Ответить  
 
 автор: Axxil   (23.06.2010 в 11:38)   письмо автору
 
   для: sms-send   (23.06.2010 в 11:01)
 

>> А чем определяется именно такой порядок?

Выборкой из дркгой таблицы. Чтоб не цеплять JOINом огромную таблицу к без того приличному запросу, я делаю выборку ID пользователей и потом этот массив использую в качестве условия.

Это только пример. Количество значений в конструкции IN может быть гораздо больше. Так что CASE не пройдёт.

>> Если сильно захочется сделать костыль

Костыль как раз в том, чтобы сортировать результат выборки средствами PHP. Я спросил, потому что думал может есть какая-то хитрая возможность сортировки о которой я не знаю.

  Ответить  
 
 автор: garold   (23.06.2010 в 12:15)   письмо автору
 
   для: Axxil   (23.06.2010 в 11:38)
 

ORDER BY FIND_IN_SET()

  Ответить  
 
 автор: garold   (23.06.2010 в 12:23)   письмо автору
 
   для: garold   (23.06.2010 в 12:15)
 

SELECT * FROM users WHERE user_id IN (22,34,11,9,4) ORDER BY FIND_IN_SET(user_id,'22,34,11,9,4')

  Ответить  
 
 автор: Axxil   (23.06.2010 в 13:42)   письмо автору
 
   для: garold   (23.06.2010 в 12:23)
 

Вот, то, что я и хотел.

Спасибо огромное

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования