Задать вопрос
gr33tx
@gr33tx

Как составить сложный запрос по fulltext отдельными запросами к отдельным полям?

Всем привет! Подскажите пожалуйста, голову сломал уже.
Есть таблица пользователей с тремя логически отдельными полями 1,2 и 3 (характеристиками) varchar fulltext.
Необходимо найти пользователей по трем характеристикам, заданным отдельно для каждого поля и отсортировать по составляющей релевантности.
То есть это как бы три логических запроса к одной таблице с соответствующим запросом к соответствующему полю, но в итоге как-то вычислить из трех результатов итоговую таблицу отсортированную по пользователям набравшим больше всего очков-релевантности по трем полям.
Как такое реализовать?

Вот к примеру: первая характеристика отражает положительные качества претендента, вторая отрицательные, а третья вообще город. Пользователей много, но необходимо отыскать например: 1: обучаемость, пунктуальность, 2: курение, болтливость 3: Курск. И нужно составить запрос к таблице и найти наиболее подходящих по описанию людей.
Как это логически организовать и в виде запроса?

Есть идея делать три отдельных запроса и в каждой результирующей таблице пользователям сверху вниз присваивать очки от больших к меньшим.
Когда будут готовы три таблицы составить четвертую из пользователей из всех трех таблиц в одном столбце и суммы их очков собранных в трех таблицах. И уже у кого больше тот и выше. Но что-то это как-то не изящно.
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT * 
  FROM `table`
  ORDER BY (MATCH `column1` AGAINST ('обучаемость, пунктуальность')) +
           (MATCH `column2` AGAINST ('курение, болтливость')) +
           (MATCH `column3` AGAINST ('Курск'))

Можно ещё домножить каждую скобку на весовой коэффициент, определяющий важность данного столбца в поиске.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы