Как выбрать на основе ключевого слова или строки в базе данных MySQL? - PullRequest
2 голосов
/ 29 июля 2011

Я делаю свою функцию поиска, но я не знаю, как выбрать только те строки, которые содержат условия поиска.Идея состояла бы в том, чтобы выбрать только строки со строкой $ search из таблицы lines в столбце «Текст».Как я мог это сделать?Спасибо

Ответы [ 3 ]

2 голосов
/ 29 июля 2011
$query = "SELECT * FROM lines WHERE Text LIKE '%".$search."%'";

Использование mysql LIKE в сочетании с подстановочными знаками (%) должно помочь.

1 голос
/ 29 июля 2011

Я не рекомендую использовать LIKE для поиска подстроки или поиска по ключевым словам, потому что это вызывает сканирование таблицы и не может быть улучшено индексом.Это означает, что по мере роста вашей таблицы она будет работать в сотни или тысячи раз медленнее, чем решение, использующее полнотекстовое индексирование.

MySQL поддерживает тип индекса FULLTEXT, но работает только в MyISAM (в настоящее время).Прочтите о том, как CREATE FULLTEXT INDEX и как использовать индексные функции FULLTEXT MATCH() AGAINST().

Большинство людей используют Поиск сфинкса или Apache Solr для полнотекстовой индексации, как дополнительная технология для MySQL.

См. Также мою презентацию Практический полнотекстовый поиск в MySQL или мою книгу Антипаттерны SQL: избеганиеПодводные камни программирования баз данных .

0 голосов
/ 29 июля 2011
select * from lines where Text = $search

или используйте

select * from lines where Text like '%$search%' 

, если вы хотите найти значение, которое включает в себя $ search, но не совсем соответствует ему.

EDIT

Если $ search включает в себя только часть значения в Text, но не соответствует порядку слов, IE Text value = "pizza in paris" и $search = "pizza paris", тогда вы можете разделить $ search на отдельные строки и запустить поиск с помощьюand предложение.

select * from lines where Text like '%$search1%' and Text like '%$search2%'

, где $search1 - первое слово, а $search2 - второе слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...