Выборка по нескольким полям с максимальным количеством совпадений
Есть таблица с несколькими полями типа INT
Например:
| id1 | id2 | id3 | id4 | id5 | id6 |
|---|---|---|---|---|---|
| 9 | 2 | 5 | 3 | 8 | 4 |
| 6 | 1 | 8 | 2 | 7 | 3 |
| 2 | 3 | 6 | 1 | 9 | 5 |
| 9 | 7 | 8 | 3 | 2 | 6 |
| 1 | 2 | 7 | 4 | 8 | 5 |
Как сделать поиск, что бы найти строки с максимальным количеством совпадений. Если запрос может быть из 2, 3, ... , 6 параметров. Т.е. нужно например найти сроки где есть 2,4,8 в любом из столбцов т.е. надо получить первую и последнюю строку. И если нет точного совпадения то хотя бы с двумя совпадениями.
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte AS ( SELECT *, (FIND_IN_SET(id1, @criteria) > 0) +
(FIND_IN_SET(id2, @criteria) > 0) +
(FIND_IN_SET(id3, @criteria) > 0) +
(FIND_IN_SET(id4, @criteria) > 0) +
(FIND_IN_SET(id5, @criteria) > 0) +
(FIND_IN_SET(id6, @criteria) > 0) matches
FROM test )
SELECT *
FROM cte
WHERE matches = ( SELECT MAX(matches)
FROM cte );