SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2010 01:20:58

binarius
Участник
Зарегистрирован: 07.04.2010
Сообщений: 14

Как можно вырубить автосортировку по первичному ключу?

Здравствуйте!
Такая проблема. Есть запрос банальный вида:

SELECT * FROM `table` WHERE `id` IN(16,614,42,51,7426,21,2,461,246)

Проблема состоит в том что мне нужно получить вывод именно в том порядке как я указал на входе в IN (этот порядок результат вычисления рейтинга элементов), а mysql мне сортирует сам так, как будто в запрос вписано ORDER BY `id` ASC. Причем в другом подобном скрипте всё тоже самое работает нормально, сортирует именно так как указано в IN.
В чем может быть проблема?
Заранее благодарю за помощь!

Неактивен

 

#2 25.08.2010 01:36:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как можно вырубить автосортировку по первичному ключу?

Никак. Порядок сортировки результата запроса гарантирует только ORDER BY. Без него запрос запущенный дважды может вернуть два разных порядка.

Неактивен

 

#3 27.08.2010 13:35:27

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Re: Как можно вырубить автосортировку по первичному ключу?

SELECT *,
    case id
      when 16 then 1
      when 614 then 2
      when 42 then 3
      when 51 then 4
      when 7426 then 5
      when 21 then 6
      when 2 then 7
      when 461 then 8
      when 246 then 9
    end as SortOrder
    FROM `table` WHERE `id` IN(16,614,42,51,7426,21,2,461,246)
    order by SortOrder
Скажу сразу, конкретно этот код не проверял, но принцип вроде понятен. Если будут проблемы с синтаксисом, то можно сделать вложенный селект и order by возложить на внешнюю его часть.

Отредактированно Lem0nti (27.08.2010 13:36:40)

Неактивен

 

#4 29.08.2010 23:06:51

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Как можно вырубить автосортировку по первичному ключу?

@binarius: Не надо изобретать велосипед.

Ест' готовое решение от MySQL:

ORDER  BY Field()

SELECT * FROM `table` WHERE `id` IN(16,614,42,51,7426,21,2,461,246) ORDER BY FIELD (id, 16,614,42,51,7426,21,2,461,246)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson