Forum Webscript.Ru
Общие => Базы данных => Тема начата: Error202 от 01 Июня 2006, 13:09:40
-
запрос ... WHERE (w = \'word1\')or(w = \'word2\')or(w = \'word3\')...
Из таблицы вытаскиваются все записи, где w=word1 или w2 или w3 вперемешку...
А можно ли сделать так, чтобы они вытаскивались так:
Сначала все, где w = w1, затем все, где w2 и т.д.?
-
SELECT * FROM `table_name` WHERE (w = \'word1\') OR (w = \'word2\') OR (w = \'word3\') ORDER BY w
-
Группировка, то произойдет, а вот последовательности выбора нет, т.е.
в моем случае вытаскиваются сначала все с w2, затем все с w1 и т.д.
А как сделать так, чтобы последовательность w1,w2,w3 сохранилась?
-
Error202:
А как сделать так, чтобы последовательность w1,w2,w3 сохранилась?
Какая последовательность?
-
Мне нужно, чтобы сначала были выбраны все записи где w = w1, затем все, где w = w2 и др... А ORDER BY сортирует все по алфавиту и порядок совсем другой...
-
Ну тогда переваривай такой запрос
SELECT *
FROM
test
WHERE
w = \'word1\'
OR w = \'word2\'
OR w = \'word3\'
ORDER BY
(
CASE w
WHEN \'word1\' THEN 3
WHEN \'word2\' THEN 2
WHEN \'word3\' THEN 1
END
) DESC
-
Так штука втом, что word1, 2,3 ... n - неизвестно сколько слов... Может быть 1, а может быть и 10
-
Ну нужный порядок тебе известен, да?
И слова я так понимаю не с неба беруться...
А выражение CASE ты можешь собирать при помощи PHP, и потом просто использовать его в запросе.
-
Логично, спасибо!