我有一個包含逗號分隔關鍵字的字符串。例如:MySQL和PHP:多關鍵字搜索
$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;
這種方法有效,但在性能上效率低下。如果有很多關鍵字,它會做很多查詢。
我的問題是,是否有更好的方法來實現相同的目標?即用包含任何關鍵字的地址返回所有記錄的最簡單方法是什麼?
這可以幫助你:http:// stackoverflow。com/a/9736386/1983854 – fedorqui
結合「LIKE」和「IN」:http://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server – Chris
@Shivian認真,爲什麼didn'你用我的REGEXP單線? – Jimbo