コンマ区切りのキーワードを含む文字列があります。例えば:
$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 を含むアドレスを持つすべてのレコードを返す最も簡単な方法は何ですか?