Как составить сложный запрос по fulltext отдельными запросами к отдельным полям?
Всем привет! Подскажите пожалуйста, голову сломал уже.
Есть таблица пользователей с тремя логически отдельными полями 1,2 и 3 (характеристиками) varchar fulltext.
Необходимо найти пользователей по трем характеристикам, заданным отдельно для каждого поля и отсортировать по составляющей релевантности.
То есть это как бы три логических запроса к одной таблице с соответствующим запросом к соответствующему полю, но в итоге как-то вычислить из трех результатов итоговую таблицу отсортированную по пользователям набравшим больше всего очков-релевантности по трем полям.
Как такое реализовать?
Вот к примеру: первая характеристика отражает положительные качества претендента, вторая отрицательные, а третья вообще город. Пользователей много, но необходимо отыскать например: 1: обучаемость, пунктуальность, 2: курение, болтливость 3: Курск. И нужно составить запрос к таблице и найти наиболее подходящих по описанию людей.
Как это логически организовать и в виде запроса?
Есть идея делать три отдельных запроса и в каждой результирующей таблице пользователям сверху вниз присваивать очки от больших к меньшим.
Когда будут готовы три таблицы составить четвертую из пользователей из всех трех таблиц в одном столбце и суммы их очков собранных в трех таблицах. И уже у кого больше тот и выше. Но что-то это как-то не изящно.
Для правильного вопроса надо знать половину ответа
SELECT *
FROM `table`
ORDER BY (MATCH `column1` AGAINST ('обучаемость, пунктуальность')) +
(MATCH `column2` AGAINST ('курение, болтливость')) +
(MATCH `column3` AGAINST ('Курск'))
Можно ещё домножить каждую скобку на весовой коэффициент, определяющий важность данного столбца в поиске.
gr33tx: Да. Только учтите, если использовать режим по умолчанию, то слова встречающиеся в половине и более строк таблицы будут пропущены.
возможно вам нужно будет использовать BOOLEAN MODE