Ранжирование результатов поиска в SQL

302
07 января 2017, 13:47

Допустим, у меня есть таблица news с колонками id(PK), title, description. Также есть некоторый поисковый запрос, например, 'самолет'. Как мне написать запрос так, чтобы сначала найти все записи с совпадением в title, затем все с совпадением в description, исключая уже найденные, и вывести все именно в таком порядке? Что-то по типу (SELECT * FROM news WHERE title LIKE '%самолет%') UNION ALL (SELECT * FROM news WHERE description LIKE '%самолет%'), но без совпадений во второй части запроса.

Answer 1
SELECT * FROM news 
WHERE title LIKE '%самолет%'
   or description LIKE '%самолет%'
order by title LIKE '%самолет%'

По оператору like вполне можно сортировать. (как обычно, я мог напутать порядок сортировки)

Answer 2
select distinct <перечислить все столбцы кроме sortOrder> from
(SELECT 1 AS sortOrder, news.* FROM news WHERE title LIKE '%самолет%'
UNION all
SELECT 2, news.* FROM news WHERE description LIKE '%самолет%'
) X
ORDER BY sortOrder
READ ALSO
Как задать логин и пароль к БД. War-file, Tomcat, MySQL

Как задать логин и пароль к БД. War-file, Tomcat, MySQL

Делаю тестовое задание там есть следующие пункты:

341
Запрос к MySQL за период, с разбивкой по дням [требует правки]

Запрос к MySQL за период, с разбивкой по дням [требует правки]

Как выбрать в массиве и опубликовать данные за месяц из базы с разбивкой данных за каждый день? Есть таблицы из которых нужно вытянуть запрс...

352
Форматирование даты MySQL DATETIME

Форматирование даты MySQL DATETIME

В течении развития проекта пришлось изменить формат вывода дат записейМодуль создания статей сохраняет дату в формате MySQL DATETIME, то есть вида...

378
Подключение драйвера pdo mysql ubuntu 16.10

Подключение драйвера pdo mysql ubuntu 16.10

Установил apache, php, php-fpm, mysql-client/server, актуальные версии

386