$term = $_POST['term'];
$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'");
これは、テキスト入力ボックスから値を取得してデータベースを検索するために使用しているコードの一部です。ただし、 %$term%の代わりに、選択した複数の用語を検索できるように、配列をループするように変更したいと考えています。
どんな助けでも大歓迎です
-マット
複雑なロジックとクエリ構築を追加する代わりにFULLTEXT
、テーブルに属性を追加して、それを全文検索します。
CREATE TABLE `tblCocktail` (
`id` INT NOT NULL AUTO_INCREMENT,
`Ingredients` VARCHAR(255)
...
PRIMARY KEY (`id`)),
FULLTEXT(`Ingredients`)
ENGINE = MyISAM;
...
$terms = implode($term_array); // todo: protect against injection here too
$query = "SELECT *
FROM `tblCocktail`
WHERE MATCH(`Ingredients`) AGAINST ('$terms')";
配列をループして検索式を作成できます。
$search = '';
foreach ($_POST['term'] as $term) {
$search .= " OR '$term'";
}
$search = preg_replace('/^ OR/', '', $search); // remove first OR
// Ingredients LIKE $search
ただし、SQL インジェクションを避けるために、このような式を使用するのではなく、準備済みステートメントを使用する必要があることに注意してください。
それが役立つことを願っています。
これを最も効果的に行うには、 MySQL の MATCH機能を確認してください。列にフルテキスト インデックスを配置すると、次のような高度な検索を使用できます。
SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$');