вопрос по ORDER BY

Alx

Новичок
вопрос по ORDER BY

Приветствую!

Стоит задача - выбрать записи из таблицы и показать их в немного необычном порядке. Не по алфавиту, и вообще по правилу, которое описать нельзя (заказчик хочет видеть свой порядок сортировки). Например, в таком порядке: aaa, nnn, ccc, zzz, ggg.

Можно ли такое прописать в ORDER BY?

Я пока сделал всё это просто на массиве таким образом:
PHP:
$order_arr = array("aaa", "nnn", "ccc", "zzz", "ggg");
						
foreach($order_arr as $key => $value){

 $sql = "SELECT * FROM Table WHERE field1='".$value."'";
 $result = mysql_query($sql);
 while($row = mysql_fetch_assoc($result)){
   ...
 }
}
но может есть более лаконичное решение?
 

Фанат

oncle terrible
Команда форума
прикольно.
а если в таблице 1000 записей - будешь делать 1000 запросов?
 

Фанат

oncle terrible
Команда форума
ну можно же было, по крайней мере, сделать один запрос, и отсортировать потом массив в скрипте?

а вообще тебе надо, конечно, сделать отдельную колонку в таблице, и соритровать с помощью того самого ORDER BY , про который ты писал в самом начале.
 

zerkms

TDD infected
Команда форума
ORDER BY CASE `field` WHEN 'val1' THEN 0 WHEN 'val2' THEN 1 ... END ASC
 

Alx

Новичок
Фанат

точно, первый вариант думаю подходит лучше (загнать всё в массив, а уже с ним потом делать что угодно), т.к. делать отдельную колонку типа "sequence number", а потом просить заказчика чтоб он указывал в админке правильно эти номера - лишняя головная боль для него.
 

Alx

Новичок
zerkms, благодарствую! вот что-то такое я и искал - достаточно лаконично. Спасибо!
 

Wicked

Новичок
Alx
Ты сделал неправильный выбор. И подходит он только если ты ОЧЕНЬ ограничен в доступе структуре таблицы.

Заметь, что у тебя при 1000 записей запрос будет объемом около 20КБ.
 

Wicked

Новичок
ORDER BY CASE `field` WHEN 'val1' THEN 0 WHEN 'val2' THEN 1 ... WHEN 'val1000' THEN 999 WHEN 'val1001' THEN 1000 ...
 

Alx

Новичок
просто этих самых "val" тут точно никогда не будет 1000, а может только 10-15 от силы..
 
Сверху