Я хочу отфильтровать данные из таблицы с использованием нескольких условий, поэтому я использую следующий запрос.Сортировка по количеству условий
SELECT * FROM `usersposts`
WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%')
OR LOWER(`fname`) = LOWER('{$keywords}')
OR LOWER(`title`) = LOWER('{$keywords}')) AND approval=1"
Работает должным образом, но теперь мне нужно отсортировать результат на основе количества условий, удовлетворяющих строке. Например, если одна строка удовлетворяет всем операторам или операторам, то она должна быть на вершине, а одно условие должно быть в конце. Как я могу это достичь?
Что я пробовал:
WHERE (LOWER(`content`) LIKE LOWER('%{$keywords}%')
OR LOWER(`fname`) = LOWER('{$keywords}')
OR LOWER(`title`) = LOWER('{$keywords}')) AND approval=1
ORDER BY
WHEN LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$location}') AND LOWER(`title`) = LOWER('{$keywords}') THEN 1
WHEN (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`fname`) = LOWER('{$keywords}'))
OR (LOWER(`post_author_fname`) = LOWER('{$keywords}') AND LOWER(`title`) = LOWER('{$keywords}'))
OR (LOWER(`content`) LIKE LOWER('%{$keywords}%') AND LOWER(`title`) = LOWER('{$keywords}')) THEN 2
ELSE 3 END
ASC;
Есть ли простая альтернатива?
Это выглядит просто :) –