Я запрашиваю несколько столбцов в таблице для некоторых слов (по сути, запрашиваю m текстовых столбцов, содержат ли они n терминов, введенных пользователем), и я хочу ранжировать эти строки по количеству совпадений.
Итак, у меня есть что-то вроде этого запроса:
SELECT *, (COLUMN1 LIKE '%TERM1%') + (COLUMN1 LIKE '%TERM2%') + ... + (COLUMN1 LIKE '%TERMN%') + (COLUMN2 LIKE '%TERM1%') + ... + (COLUMNM LIKE '%TERMN%') AS SCORE
FROM TABLE_NAME
WHERE COLUMN1 LIKE '%TERM1%' OR ... OR COLUMNM LIKE '%TERMN%'
ORDER BY SCORE DESC LIMIT 200;
Но этот запрос, кажется, не работает постоянно, иногда кажется, что все результаты имеют оценку 0, даже если есть совпадения. Кто-нибудь может подсказать в чем проблема? Я подозреваю, что это может быть связано с типом результата оператора LIKE и типом столбца оценки.
Кроме того, есть ли лучший способ сделать то же самое без генерации этого подробного запроса?