私はコンマで区切られたキーワードを含む文字列を持っています。たとえば、次のようにMySQLとPHP:複数のキーワード検索
$keywords = 'keyword1, keyword2, keyword3';
tbl_address
という名前の私のテーブルのスキーマは、この(簡体字)のようなものです:
id INT(11) PRIMARY KEY, AUTO INCREMENT
address VARCHAR(250) NOT NULL
は、私はPHP(ないPDO
)でMySQLi
を使用する必要がありますと仮定します。
$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を含むアドレスを持つすべてのレコードを返す最も簡単な方法は何ですか?
これはあなたを助けることができます:http:// stackoverflow。COM// 9736386/1983854 – fedorqui
組み合わせる「LIKE」と「IN」:「http://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server – Chris
@Shivian真剣に、なぜのdidn REGEXP one-linerを使用していますか? – Jimbo