MySQL ЗАКАЗАТЬ проблему - PullRequest
3 голосов
/ 24 марта 2009

У меня довольно простой SQL-запрос, но чего-то не хватает, и я пока не нашел ответа на эту проблему. Дело в том, что я выбираю несколько полей с несколькими идентификаторами и хочу, чтобы результат был упорядочен именно в этом порядке.

Запрос следующий

SELECT `content`.* 
FROM   `content` 
WHERE  (user_id = "1" AND ( id = "4" OR id = "7" OR id = "5" OR id = "8" )) 

Порядок по умолчанию: «id ASC» (id - это мой первичный ключ), но я хочу, чтобы в этом конкретном случае он был 4,7,5,8.

Есть идеи?

Ответы [ 5 ]

10 голосов
/ 24 марта 2009
ORDER BY CASE user_id  
    WHEN "4" THEN 1  
    WHEN "7" THEN 2  
    WHEN "5" THEN 3  
    WHEN "8" THEN 4  
    ELSE 5  
END

Если вы хотите обобщить ее, вы можете создать новую таблицу с двумя столбцами - «user_id» и «order_by_val», присоединиться к ней и «ORDER BY order_by_val».


РЕДАКТИРОВАТЬ: В @Tim, MySQL имеет проприетарную функцию - FIELD () - как отмечено в его посте, если вас не беспокоит переносимость или проблема, связанная с тем, что возвращаемые значения функции неоптимизируемы.
5 голосов
/ 24 марта 2009

Это будет делать то, что вы хотите:

select * 
from myTable
order by field(myID, 8, 7, 6) desc;

Вы можете установить порядок любого идентификатора (или любого другого), который хотите отображать, и любые другие будут следовать после этого. Надеюсь, это поможет.

Подробнее об этом @ http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field

3 голосов
/ 24 марта 2009

Я бы обычно использовал такой нечетный порядок, используя оператор case:

order by case id
             when "4" then 1
             when "7" then 2
             when "5" then 3
             when "8" then 4
             else 99
         end

Не уверен, переводится ли это непосредственно на mysql, но идея должна.

1 голос
/ 24 марта 2009
ORDER BY CASE id WHEN 4 THEN 1 
                 WHEN 7 THEN 2 
                 WHEN 5 THEN 3 
                 WHEN 8 THEN 4 
                 ELSE 99
         END; 
0 голосов
/ 24 марта 2009

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

ORDER BY CASE ID WHEN 4 THEN 1 WHEN 7 THEN 2 WHEN 5 THEN 3 WHEN 8 THEN 4 ELSE 5 END 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...