4

私は果物の例で私の質問を説明します:

私はfruit_typeidのいくつかの値を持つ配列を持っています。

$match= array("1","5","8").

テーブル'fruit'にセル(fruit_type)があります。このセルの値は次のようになります:「1,3,9」。この行に属するすべてのfruit_typeIDが含まれています。

次に、SELECTクエリを作成して、IDの1、5、または8のすべての組み合わせを含むすべての行を返します。

このクエリは機能しません。これは、セルの値が「1,5,8」であり、1、5、8(またはそれらの組み合わせまたはすべて)ではない場合にのみ機能するためです。

SELECT * FROM fruit WHERE fruit_type IN ('".implode("','",$match)."')

何か案は?

編集(質問が十分に明確ではなかったと思います。したがって、この例で必要なのは、(セル)値の1、3、または9のいずれかと$ match(1)の値のいずれかと一致するクエリです。または5または8)。

4

2 に答える 2

5

これを行うときは、インプロード内の個々の数値をそれぞれ引用符で囲んでいます。

SELECT * FROM fruit WHERE fruit_type IN ('" . implode("','",$match) . "')

結果のクエリは次のようになります。

SELECT * FROM fruit WHERE fruit_type IN ('1','5','8')

したがって、次のようになります。

SELECT * FROM fruit WHERE fruit_type IN (" . implode(",",$match) . ")

したがって、結果のクエリは次のようになります。

SELECT * FROM fruit WHERE fruit_type IN (1,5,8)

また、これをPHPで実行している場合はecho、DBコマンドを処理する直前に出力を実行して、最終的なMySQLステートメントが実際に何であるかを確認することをお勧めします。もしあなたがそうしていたら、あなたはすぐに問題を見たであろうと私はかなり確信しています。

于 2013-01-27T18:20:08.110 に答える
2

問題はクエリにあるのではなく、DB構造にあります。1つの列に複数のIDを入れないでください(少なくともクエリを実行する場合はそうではありません)。動作させることはできますが、常に非常に遅くなります。

列の代わりにfruit_type、テーブルが必要fruit_typeです。

CREATE TABLE fruit_fruittype (fruit_id INT, fruit_type_id INT, PRIMARY KEY (`fruit_id`,`fruit_type_id`));

果物ごとに果物の種類ごとに行を追加します。

これで、果物の種類を簡単に照会できます。

SELECT fruit.* FROM fruit INNER JOIN fruit_fruittype ON fruit.id = fruit_fruittype.fruit_id WHERE fruit_type_id IN (1, 5, 8) GROUP BY fruit.id;
于 2013-01-28T08:31:07.017 に答える