如何根据mysql数据库中的关键字或字符串进行选择


How to select based on keyword or string in mysql database?

我正在制作搜索功能,但我不知道如何只选择包含搜索项的行。这个想法是只选择行与字符串$搜索从表lines在列"文本"。我怎么能做到呢?由于

$query = "SELECT * FROM lines WHERE Text LIKE '%".$search."%'";

使用mysql的LIKE和通配符(%)应该可以做到。

我不建议使用LIKE来解决子字符串或关键字搜索,因为这会强制进行表扫描,并且不能通过索引来改进。这意味着随着表的增长,它将比使用全文索引的解决方案慢数百或数千倍。

MySQL支持FULLTEXT索引类型,但它只在MyISAM中工作(目前)。阅读CREATE FULLTEXT INDEXMATCH() AGAINST()的FULLTEXT索引函数。

大多数人使用Sphinx Search或Apache Solr进行全文索引,作为MySQL的补充技术。

请参阅我的演讲《实用的MySQL全文搜索》或我的书《SQL反模式第1卷:避免数据库编程的陷阱》

select * from lines where Text = $search

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

如果你想搜索一个包含$search但不完全匹配的值

编辑

如果$search只包含Text中值的一部分,但不匹配单词的顺序,即Text的值= "pizza in paris"和$search = "pizza paris",那么您可以将$search拆分为单独的字符串,并使用and子句运行搜索。

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

其中$search1是第一个单词,$search2是第二个单词