2013-05-11 2 views
0

У меня есть база данных песен и вам необходимо выполнить поиск.SQL-поиск в поле заголовка с подобным и пользовательским заказом

Я хочу, чтобы получить список результатов, где глава списка является результатом

like 'st%' 

, а остальное является результатом

like '%st%' 

Если я использую UNION это будет правильно создайте список без дубликатов, но не в том порядке, в котором я хочу.

Если я использую UNION ALL, он будет производить список в том порядке, который я хочу, но с дубликатами.

Могу ли я использовать этот запрос, или мне нужно будет сделать это по-другому?

ответ

1

Вы можете использовать операторы case в предложении order by. Вот SQL Стандартный способ сделать это:

select * 
from songs 
where song like '%st%' 
order by (case when song like 'st%' then 1 else 0 end) desc, 
     song 

В MySQL, вы можете просто использовать выражение:

order by (song like 'st%') desc, song 

Поскольку логическое выражение принимает значение 0 (ложь) или 1 (истина). desc поставит спички первыми.

Кстати, вы НЕ МОЖЕТЕ в зависимости от заказа после union или union all. Таблицы SQL по своей сути неупорядочены. Наборы результатов SQL по своей сути неупорядочены, если явно не упорядочено с предложением order by (или в предложении group by в MySQL).

0

Вы можете выполнить запрос для поиска в базе данных для сходства этих элементов и присвоить им переменные с этой точки, которые вы можете отсортировать с помощью соответствующего кода.

+0

Это очевидно. Мой вопрос состоял в том, чтобы убедиться, что это можно сделать в запросе sql. – Simon