我正在制作搜索功能,但我不知道如何只选择包含搜索项的行。其想法是只从“Text”列中的表lines中选择字符串为$search的行。我怎么做?谢谢
lines
nhaq1z211#
$query = "SELECT * FROM lines WHERE Text LIKE '%".$search."%'";
使用mysql的LIKE和通配符(%)应该可以做到这一点。
2nc8po8w2#
我不建议使用LIKE来解决子字符串或关键字搜索,因为这会强制执行表扫描,并且无法通过索引进行改进。这意味着随着表的增长,它的运行速度将比使用全文索引的解决方案慢数百倍或数千倍。MySQL支持FULLTEXT索引类型,但它仅适用于MyISAM(当前)。了解如何CREATE FULLTEXT INDEX以及如何使用FULLTEXT索引函数MATCH() AGAINST()。大多数人使用Sphinx Search或Apache Solr进行全文索引,作为MySQL的补充技术。另请参阅我的演示文稿或我的书。
LIKE
CREATE FULLTEXT INDEX
MATCH() AGAINST()
fslejnso3#
select * from lines where Text = $search
或使用
select * from lines where Text like '%$search%'
如果您想搜索包含$search但不完全匹配的值。
如果$search只包含Text中某个值的一部分,但与单词的顺序不匹配,I.E Text的value=“pizza in paris”和$search = "pizza paris",则可以将$serch拆分为单独的字符串,并使用and子句运行搜索。
$search = "pizza paris"
and
select * from lines where Text like '%$search1%' and Text like '%$search2%'
其中$search1是第一个字,$search2为第二个字。
$search1
$search2
3条答案
按热度按时间nhaq1z211#
使用mysql的LIKE和通配符(%)应该可以做到这一点。
2nc8po8w2#
我不建议使用
LIKE
来解决子字符串或关键字搜索,因为这会强制执行表扫描,并且无法通过索引进行改进。这意味着随着表的增长,它的运行速度将比使用全文索引的解决方案慢数百倍或数千倍。MySQL支持FULLTEXT索引类型,但它仅适用于MyISAM(当前)。了解如何
CREATE FULLTEXT INDEX
以及如何使用FULLTEXT索引函数MATCH() AGAINST()
。大多数人使用Sphinx Search或Apache Solr进行全文索引,作为MySQL的补充技术。
另请参阅我的演示文稿或我的书。
fslejnso3#
或使用
如果您想搜索包含$search但不完全匹配的值。
编辑
如果$search只包含Text中某个值的一部分,但与单词的顺序不匹配,I.E Text的value=“pizza in paris”和
$search = "pizza paris"
,则可以将$serch拆分为单独的字符串,并使用and
子句运行搜索。其中
$search1
是第一个字,$search2
为第二个字。