@skyfly2010

Как составить запрос к mysql?

Добрый день, дорогие профессионалы. Подскажите пожалуйста, как сделать вот такой запрос:
У нас есть поле ввода. В него человек через запятую пишет ключевые слова:
Море, пальма, девушки, C++, яма, google. Количество слов произвольное. Порядок тоже.
Имеем в mysql таблицу. В которой среди прочих полей есть поле "ключевые слова".
Приведем несколько строк в пример:
id1: Пальма, яма, Алексей, котики, погода.
id2: С++, яма, море.
id3: Пальма, масло, девушки, яндекс, другое, яд.
id4: Котики, google, яма, С++, девушки, море, пальма.
id5: Кит, лужа, жаба, картина, дрон.
id6: Кролик, бегун, яма, карта, картошка.


Необходимо составить запрос к таблице на выборку строк в которых есть слова, которые ввел пользователь, при этом так, чтобы строки расположились в порядке "чем больше совпадений тем выше строка". Тоесть строка id4 должна быть первой. За ней следует id2, id1, id3, id6, id 5.

Как составить такой запрос пока у меня самого идей нет.
Есть только предположение, взять строку запроса, разбить на части по каждому ключу извлечь строки, затем сравнивая строки установить порядок. Но это получается очень громоздка и не красиво.

Если у кого-то есть идеи, как решить этот вопрос, буду очень благодарен.
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Нормализуйте свою таблицу с ключевыми словами.

Теперь решение элементарно: разбиваете входную строку по разделителю на приложении, загоняете в запрос:
select id, count(0) as match_count from tablename
where keyword in (...)
group by id
order by match_count desc

Всё, готовый отсортированный список id.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы