У меня есть таблица вроде этого:MySQL ORDER BY совпадение ключевого слова
mysql> select * from test; +-------------+ | name | +-------------+ | one | | two | | three | | tic tac toe | | tac toe tic | +-------------+ 5 rows in set (0.00 sec)
Я хотел бы запросить его так, что я получаю все строки, но с тех строк, соответствующих определенных ключевых слов первого. Это то, что я до сих пор:
mysql> select * from test order by instr(name, 'tac') desc; +-------------+ | name | +-------------+ | tic tac toe | | tac toe tic | | one | | two | | three | +-------------+ 5 rows in set (0.01 sec)
Единственная проблема с этим, я бы предпочел, чтобы заказать совпадающие строки по тому, насколько близко к началу поля происходит ключевое слово. Так как instr() возвращает 0 для отсутствия соответствия, строки с несогласованностью появляются сначала, когда я ORDER BY INSTR (name, 'tac') ASC. Я не смог найти способ обойти это.
Мне нужно MySQL на заказ, как этот
1
2
3
4
0
0
0
или мне нужно инстр() возвращать NULL вместо 0.
Это работало perfe Благодарю вас! Я никогда раньше не использовал оператор CASE в MySQL или какой-либо условный SQL-запрос. Я думаю, что это, вероятно, быстрее, чем сортировка результатов в чем-то вроде PHP после запроса. – Kevin