Mysql: Результаты заказа в соответствии с количеством совпадений в предложении WHERE?

Можно ли заказать (DESC) результаты MYSQL-запрос в зависимости от количество матчей это в ГДЕ оговорка, который был отделен несколько операторов ИЛИ?

Я хотел бы сделать это для следующего запроса:

SELECT column_1, column_2, column_2
FROM tbl_table
WHERE column_1 LIKE '%$string1%'
OR column_2 LIKE '%$string2%'
OR column_3 LIKE '%$string3%'
ORDER BY ... "

1

Решение

Вы можете использовать SUM () и GROUP BY следующим образом:

ВЫБРАТЬ столбец_1, столбец_2, столбец_3,
SUM (IF (column_1 LIKE '% $ string1%', 1, 0)) как S1,
SUM (IF (column_2 LIKE '% $ string2%', 1, 0)) как S2,
SUM (IF (column_3 LIKE '% $ string3%', 1, 0)) как S3
FROM tbl_table
ГДЕ column_1 НРАВИТСЯ '% $ string1%'
ИЛИ column_2 LIKE "% $ string2%"
ИЛИ column_3 LIKE "% $ string3%"
GROUP BY column_1, column_2, column_3
ЗАКАЗАТЬ S1 DESC, S2 DESC, S3 DESC
3

Другие решения

Это единственный способ, которым я знаю:

SELECT column_1, column_2, column_2
, IF(column_1 LIKE '%$string1%', 1, 0)
+ IF(column_2 LIKE '%$string2%', 1, 0)
+ IF(column_3 LIKE '%$string3%', 1, 0)
AS matchCount
FROM tbl_table
WHERE column_1 LIKE '%$string1%'
OR column_2 LIKE '%$string2%'
OR column_3 LIKE '%$string3%'
ORDER BY matchCount DESC
2

По вопросам рекламы [email protected]