Сортировка вывода строки SQL в произвольном порядке?

Итак, в моей базе данных хранятся имена музыкальных инструментов (и различные другие атрибуты). Предположим, что id – это первичный ключ, а name – уникальный ключ.

В скрипте PHP я выбираю элементы по их классу инструментов, например:

 $name = mysql_real_escape_string($_POST['name']); $row = mysql_fetch_row(mysql_query("SELECT * FROM `instruments` WHERE name LIKE '%$name%' ORDER BY id")); 

Таблица результатов:

 id name 1 "Flute 2" 2 "Bass Flute" 3 "Flute 10" 4 "Flute 7" 

Это позволяет мне выбрать все семейство инструментов, таких как «Saprano Saxophone», «Alto Saxophone» и т. Д., Просто запросив «саксофон».

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

 id name 2 "Bass Flute" 3 "Flute 10" 1 "Flute 2" 4 "Flute 7" 

Это прекрасно работает, но, будучи музыкантами, они любят шутить с администратором БД и не любезно относятся к тому, чтобы «Флейты баса», перечисленные выше «Флейта» в результатах флейты, и на самом деле не любезно относятся к тому, Флейта 10 ", указанная перед« Флейтой 2 ».

Итак, видя, что нет ORDER BY score_order (это было бы слишком легко, не так ли …), как я мог бы ввести какую-то систему заказов для правильного отображения инструментов?

После мозгового штурма я пришел к одному решению: я мог бы добавить еще один столбец типа integer и «ранжировать» инструменты, основанные на их важности (то есть Piccolos будет «1», «Flutes» 2 и т. Д.):

 ... nts` WHERE name LIKE '%$name%' ORDER BY rank, name")); id name rank 3 "Flute 10" 2 1 "Flute 2" 2 4 "Flute 7" 2 2 "Bass Flute" 5 

Однако это не объясняет тот факт, что «Флейта 10» предшествует «Флейте 2», буквенно-цифровым способом .

Таблица идеальных результатов (упорядочена по rank , а затем по name ):

 id name rank 6 "Piccolo" 1 1 "Flute 2" 2 4 "Flute 7" 2 3 "Flute 10" 2 5 "Alto Flute" 4 2 "Bass Flute" 5 

Итак, мои вопросы:

  1. Является ли это приемлемым решением, и стоит ли его реализовать?
  2. Есть ли способ иметь записи SQL-заказов, анализируя все число, а не число по числу?

Благодаря!

Related of "Сортировка вывода строки SQL в произвольном порядке?"

Мне не совсем понятно, каков будет ваш идеальный порядок сортировки, но вы, вероятно, должны просто добавить дополнительный столбец в таблицу базы данных. Вы говорите, что ORDER BY score_order будет слишком простым, но почему бы не добавить явное поле score_order и порядок?

Вы можете создать другой порядок, делая что-то вроде этого. Это взломать.

 select * from table order by ( case name when 'Health' then 0 when 'Flute 10' then 1 when 'Freeze' then 2 when 'Bass Flute' then 3 end ) 

И, вероятно, лучше использовать столбец id.

 select * from table order by ( case id when 3 then 0 when 1 then 1 when 4 then 2 when 2 then 3 end ) 

Я бы поставил столбец «приоритет» в вашей таблице. Затем закажите его по самым важным (например, базовые инструменты будут 0: флейта, саксофон и т. Д. Модификации будут 1: бас-флейта, флейта Альто и т. Д. И приоритет Numerics – их число + 100 или что-то, что помещает их в но все же в числовом порядке).

Наилучшим способом сортировки чисел (а затем в алфавитном порядке в случаях с одним и тем же приоритетом) является численное использование чисел.

Изменить: Таким образом, вышесказанное даст вам что-то вроде этого (приоритет в родительской):
Флейта (0)
Бас-флейта (1)
Тенорная флейта (1)
Флейта 1 (101)
Флейта 2 (102)
Флейта 10 (110)