Создание SQL-запроса для сопоставления поля varchar с использованием заданного списка слов

#mysql #sql

#mysql #sql

Вопрос:

Я ищу совет по созданию SQL-запроса. У меня есть база данных MySQL с полем VARCHAR (255) под названием «предложения». Как вы можете догадаться, это поле содержит предложение из нескольких слов. Я хочу запросить базу данных, чтобы получить любую комбинацию из нескольких заданных слов, но без каких-либо других слов.

Вот пример: допустим, я хочу получить каждую комбинацию «делать«, «тебе«, «нравится«, «чай«. Итак, я хотел бы иметь в своем результате предложения: ‘любишь ли ты чай‘, ‘любишь ли ты‘, или ‘любишь ли чай‘, или ‘делаешь чай‘, но не предложения ‘любишь ли ты кофе‘, ‘любишь ли ты чай

Конечно, я мог бы создать все возможные комбинации слов, например, с помощью PHP, а затем создать правильный SQL-запрос. Но я ищу способ сделать это только с использованием операторов SQL и заданных слов, без какой-либо другой предварительной обработки.

Большое вам спасибо за любую помощь.

Комментарии:

1. Что произойдет, если предложение было таким: ты ненавидишь чай и любишь кофе ?

2. если вы говорите о входных данных, должны быть возвращены все предлагаемые результаты, кроме «do you fancy tea», потому что fancy отсутствует во входных данных. Если ваше предложение является строкой в dabatabe, его не следует возвращать, потому что coffe отсутствует во входных данных.

3. Игнорируйте мой предыдущий (удаленный) комментарий. Похоже, сценарий можно объяснить с помощью наборов . Я думаю.

4. Возможно ли для вас сохранить отдельные слова предложения в виде строк в другой таблице?

5. Я не уверен, но, возможно, у вас может быть таблица с четырьмя строками, do, you, like, tea объединенными с sentence_words таблицей, сгруппированной по sentence_id. Будут возвращены предложения, количество слов в которых равно количеству совпадающих строк. Извините, я не могу описать это словами, но я могу объяснить с помощью PHP-кода, если это как-то поможет.

Ответ №1:

если вы хотите автоматически настроить поиск по «вам нравится» и «вам нравится чай», но не «вам нравится кофе», я думаю, это невозможно, потому что для поисковой системы это просто строка символов. он не видит разницы между ‘tea’ и ‘coffe’, кроме длины (3 против 5) и набора символов

PS для поиска по нескольким строкам попробуйте использовать полнотекстовый

Ответ №2:

когда вы используете

 WHERE (field LIKE '%do%%like%%tea%')
  

тогда приведенные вами примеры работают, но вы полагаетесь на заданный порядок, поэтому значение «как tea do» не будет охвачено.

Я бы предположил, что решением было бы сформировать запрос следующим образом:

 WHERE (field LIKE '%do%') AND (field LIKE '%like') AND (field LIKE '%tea%')