Поиск по релевантности SQL

Я хотел бы искать строки из базы данных, но я хочу, чтобы это упорядочить по релевантности

Я взял этот пример и, как полагают, работает отлично.

Перед поиском

  1. Быстрая коричневая собака прыгнула, как лиса.
  2. Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
  3. Быстрая лиса перепрыгнула через Сирс Тауэр.

После поиска

  1. быстрый коричневый лиса перепрыгнул через ленивый собака.
  2. быстрый коричневый собака прыгнули лиса-лайк.
  3. быстрый лиса перепрыгнул через Сирс Тауэр.

Код используется

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";

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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