Подсчет кол. найденых слов в одном столбце по выражению like в mysql

228
20 августа 2018, 08:40

Есть такая таблица в БД:

id    title
 1    one two
 2    one three
 3    one
 4    three
 5    one two three

и есть запрос вида:

SELECT id where title like '%one%' or title like '%three%

Он вернет все строки в которых будут значения 'one' 'three'. По сути он вернет подряд строки 1,2,3,4,5. Мне необходимо, чтобы он первыми вернул строки, в которых максимальное количество совпадений, т.е. должен вернуть 2,5,1,3,5. Я думаю, что нужно по каждому найденому слову лайком добавлять какой-нибудь переменной score 1 очко, потом сортировать по этой переменной. Но как это сделать, не знаю.

Может есть какoe либо решение?

Сделать при помощи PHP не могу, т.к. данные с БД получаю порциями по 25 записей, а для того, чтобы обработать при помощи PHP необходимо получить весь набор данных.

Answer 1

Можно попробовать вот так:

SELECT id 
FROM table_test
WHERE title like '%one%' or title like '%three%'
ORDER BY sum(CASE WHEN title REGEXP '(one|three)' THEN 1 ELSE 0 END) DESC

PS этот код не тестировался...

Answer 2

В принципе нашел интересное решение такого вида

SELECT name FROM table_test WHERE name LIKE '%строка_поиска%' ORDER BY CASE WHEN name LIKE 'строка_поиска' THEN 0 WHEN name LIKE 'строка_поиска %' THEN 1 WHEN name LIKE 'строка_поиска%' THEN 2 WHEN name LIKE '% строка_поиска%' THEN 3 ELSE 4 END

Доработал под свой вариант начало сортировать по совпадениям.

READ ALSO
Как писать join без select в MYSQL?

Как писать join без select в MYSQL?

Пошёл на собеседование, задали такой вопрос: "как писать join без select"По-моему так не возможно, естественно я писал select

254
Flex макет работает некорректно в Сафари

Flex макет работает некорректно в Сафари

Сделал на пробу макет, который работает как нужно в IE, FireFox и Chrome под Windows, даже под IE11

310
Как сделать что бы контент не смещался

Как сделать что бы контент не смещался

Фильмы не встают друг под друга а если это сделать то слетает поисковая строка и все что за ней вот кодыHtml и css

343
Вызов почтового клиента из браузера

Вызов почтового клиента из браузера

Есть одностраничный сайтПроблема в том что по клику на mail должен открыться почтовый клиент, но этого не происходит

184