#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%')