Я хотел бы искать строки из базы данных, но я хочу, чтобы это упорядочить по релевантности
Я взял этот пример и, как полагают, работает отлично.
Перед поиском
- Быстрая коричневая собака прыгнула, как лиса.
- Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
- Быстрая лиса перепрыгнула через Сирс Тауэр.
После поиска
- быстрый коричневый лиса перепрыгнул через ленивый собака.
- быстрый коричневый собака прыгнули лиса-лайк.
- быстрый лиса перепрыгнул через Сирс Тауэр.
Код используется
SELECT *
FROM `items`
WHERE `description` LIKE 'quick'
AND (
`description` LIKE 'brown'
OR `description` LIKE 'fox'
OR `description` LIKE 'lazy'
OR `description` LIKE 'dog'
)
LIMIT 0 , 30
ORDER BY (
(
CASE WHEN `description` LIKE 'brown'
THEN 1
ELSE 0
END
) + (
CASE WHEN `description` LIKE 'fox'
THEN 1
ELSE 0
END
) + (
CASE WHEN `description` LIKE 'lazy'
THEN 1
ELSE 0
END
) + (
CASE WHEN `description` LIKE 'dog'
THEN 1
ELSE 0
END
)
) DESC
Мой вопрос Когда пользователи выполняют поиск, условия поиска являются динамическими. Как добавить для каждого промежуточного заказа, чтобы поиск работал.
То, что я пробовал, но все же я знаю, что это не сработает. Во-первых, я не знаю, как взорвать знак +
$sql .= " ORDER BY ";
foreach ($words as $word) {
$sql .= " ( CASE WHEN `pd.name` LIKE '%".$word."%'
THEN 1
ELSE 0
END) + ";
}
$sql .= " ASC";
Это пример поискового запроса Opencart.
Код ниже работает, но как мне сделать его динамичным
$sql .= " ORDER BY
( CASE WHEN pd.name like '%".$word1."%' THEN 1 ELSE 0 END)
+
( CASE WHEN pd.name like '%".$word2."%' THEN 1 ELSE 0 END) DESC";
Задача ещё не решена.
Других решений пока нет …