【发布时间】:2013-04-08 16:48:00
【问题描述】:
我有一个包含逗号分隔关键字的字符串。例如:
$keywords = 'keyword1, keyword2, keyword3';
我的表架构,名为tbl_address 是这样的(简化):
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
假设我必须在 PHP 中使用 MySQLi(而不是 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;
这种方法有效,但性能低下。如果有很多关键字,它将进行很多查询。
我的问题是,有没有更好的方法来实现相同的目标?即返回地址包含任何关键字的所有记录的最简单方法是什么?
【问题讨论】:
-
结合“LIKE”和“IN”:stackoverflow.com/questions/1865353/…
-
@Shivian 说真的,你为什么不使用我的 REGEXP 单线?
-
如果关键字包含正则表达式关键字,查询将失败,或者产生意外结果,例如关键字 =
'|=|=|' -
当然可以,这是你的问题;)