1
$term = $_POST['term'];

$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'");

これは、テキスト入力ボックスから値を取得してデータベースを検索するために使用しているコードの一部です。ただし、 %$term%の代わりに、選択した複数の用語を検索できるように、配列をループするように変更したいと考えています。

どんな助けでも大歓迎です

-マット

4

3 に答える 3

0

複雑なロジックとクエリ構築を追加する代わりに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')";
于 2012-04-19T23:57:31.260 に答える
0

配列をループして検索式を作成できます。

$search = '';
foreach ($_POST['term'] as $term) {
    $search .= " OR '$term'";
}
$search = preg_replace('/^ OR/', '', $search); // remove first OR

// Ingredients LIKE $search

ただし、SQL インジェクションを避けるために、このような式を使用するのではなく、準備済みステートメントを使用する必要があることに注意してください。

それが役立つことを願っています。

于 2012-04-19T23:52:00.357 に答える
0

これを最も効果的に行うには、 MySQL の MATCH機能を確認してください。列にフルテキスト インデックスを配置すると、次のような高度な検索を使用できます。

SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$');
于 2012-04-19T23:54:30.047 に答える