我有一个包含逗号分隔关键字的字符串。例如:
$keywords = 'keyword1, keyword2, keyword3';
我的表架构,名为tbl_address
是这样的(简化的):
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
假设我必须使用MySQLi
在 PHP 中(不是PDO
).
这是我目前的方法:
$result = array();
$keyword_tokens = explode(',', $keywords);
foreach($keyword_tokens as $keyword) {
$keyword = mysqli_real_escape_string(trim($keyword));
$sql = "SELECT * FROM tbl_address WHERE address LIKE'%$keyword%'";
// query and collect the result to $result
// before inserting to $result, check if the id exists in $result.
// if yes, skip.
}
return $result;
这种方法有效,但性能低下。如果关键词很多,就会产生很多查询。
我的问题是,有没有更好的方法来实现相同的目标?即返回地址包含 ANY 关键字的所有记录的最简单方法是什么?
一个简单的REGEXP
可能就是你所追求的。您必须自己检查一下它的效率如何。
SELECT * FROM tbl_address WHERE field REGEXP 'keyword1|keyword2|keyword3';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)