Возможно, ваша логика сортировки заключается в выполнении нескольких условий ORDER BY.
Добавление пробела слева и справа от строки поиска будет означать, что вы не будете точно совпадать, когда первое или последнее слово совпадают. По этой причине я должен убедить вас использовать более медленную функцию REGEXP
с ее длинными маркерами границы слова.
Код: ( Демо ) ( Базовая демоверсия SQLFiddle )
$q = '8gb pro';
$parts = explode(' ', $q);
$sort = "ORDER BY";
$sort .= " (CASE WHEN `titel` REGEXP '[[:<:]]{$q}[[:>:]]' THEN 1 ELSE 2 END),";
$sort .= " (CASE WHEN `titel` REGEXP '[[:<:]]" . implode("[[:>:]]' AND `titel` LIKE '[[:<:]]", $parts) . "[[:>:]]' THEN 1 ELSE 2 END),";
$sort .= " (CASE WHEN `beschreibung` REGEXP '[[:<:]]" . implode("[[:>:]]' AND `beschreibung` LIKE '[[:<:]]", $parts) . "[[:>:]]' THEN 1 ELSE 2 END),";
$sort .= " `views` DESC";
echo $sort;
Выход:
ORDER BY
(CASE WHEN `titel` REGEXP '[[:<:]]8gb pro[[:>:]]' THEN 1 ELSE 2 END),
(CASE WHEN `titel` REGEXP '[[:<:]]8gb[[:>:]]' AND `titel` LIKE '[[:<:]]pro[[:>:]]' THEN 1 ELSE 2 END),
(CASE WHEN `beschreibung` REGEXP '[[:<:]]8gb[[:>:]]' AND `beschreibung` LIKE '[[:<:]]pro[[:>:]]' THEN 1 ELSE 2 END),
`views` DESC
A ссылка, объясняющая синтаксис границы слова .