2012-04-15 4 views
1

У меня есть этот заказ на проблему я canot трещина. Я выбираю из своего стола вот так:mysql заказать по оригиналу "где заказать"

SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3' 

Который возвращает мне модули, которые я хочу. Но модули лежат таблицы, скажем, в следующем порядке:

  1. Module3
  2. module1
  3. module2

И они возвращаются ко мне в таком порядке. Как я могу заставить их отображать в порядке AS IN WHERE CLAUSE (1,2,3)?

Большое спасибо!

ответ

2

Я думаю, что вы ищете FIELD:

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module1', 'module2', 'name3') 

Во всяком случае, если имена в алфавитном порядке просто использовать:

ORDER BY name 

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

+0

Спасибо за ваш ответ, это было самым полезным! Реализация Codigniter, если кто-то заинтересован, можно найти здесь: [link] (http://www.simonemms.com/2011/04/07/codeigniter-activerecord-order-by-field/) –

0

Я думаю, у вас есть опечатка в вашем вопросе. Ваше последнее условие должно быть name = 'module3' вместо того, чтобы просто name3

Пожалуйста, попробуйте следующее:

SELECT * 
FROM 'sidemodules' 
WHERE name = 'module1' OR name = 'module2' OR name = 'module3' 
ORDER BY name; 
+0

Нет, код в порядке , мой пост был неаккуратным: S;) –

0

Если у вас есть фиксированный порядок, Вы можете заказать с сазе:

SELECT * FROM 'sidemodules' 
WHERE name = 'module1' 
    OR name = 'module2' 
    OR name = 'module3' 
ORDER BY CASE 
    WHEN name = 'module1' THEN 1 
    WHEN name = 'module3' THEN 2 
    WHEN name = 'module2' THEN 3 
ELSE '0' 
END 
1

вам нужно используйте поле FIELD по порядку. returnset будет тот же порядок, который вы пишете.

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module1', 'module2', 'name3') 

результат: Module1, module2, name3

SELECT * FROM sidemodules 
WHERE name IN ('module1', 'module2', 'name3') 
ORDER BY FIELD(name, 'module2', 'module1', 'name3') 

результат: module2, Module1, name3

+0

Спасибо за ваш ответ. –

Смежные вопросы