2012-02-28 16 views
27

可能性の重複:
MySQL query using an array
Passing an array to mysqlMySQL PHP - SELECT where where = array()?

私はPHPの配列を持っている:

$array = array(1, 4, 5, 7); 

あなたが見ることができるように、私は別の値の配列を持っています、私は、かどうかをチェックするMYSQLステートメントを記述したいはと等しく、は配列内の値のいずれかになります。たとえば、1行にidが1の場合、その行は4,5,7と同じ行を返します。配列の長さはプログラムの性質によって変わる可能性があります。私はちょうどいいですか:

SELECT ... 
    FROM ... 
WHERE id = '$array' 

もっと良い方法がありますか?
不明な点がある場合は、私に詳細を問い合わせてください。

+0

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – jere

+0

参照:http://meta.stackexchange.com/questions/2950/should-hi-thanks -taglines-and--from-from-from-post-from-投稿 –

答えて

91

INを使用してください。

$sql = 'SELECT * 
      FROM `table` 
     WHERE `id` IN (' . implode(',', array_map('intval', $array)) . ')'; 
+2

私は 'IN'が優先するステートメントであると思います。また、アレイを具体的に配置する方法を教えてくれてありがとう。 :) –

+2

配列の値が同じidsの場合、単一の時刻のデータが得られます。複数の時刻のデータが必要な場合は、どうすればよいですか? –

+0

@DharaPatelあなたは同じ 'id'を共有するアイテムを持っていますか? idsを共有することは設計上の決定に悪影響を与える可能性があります(プライマリと仮定して)。 – alex

18

あなたが探しているのはIN()です。これは、指定されたフィールドに1つ以上の値が含まれているかどうかをテストします。

SELECT * FROM `Table` WHERE `id` IN (1, 2, 3) 

あなたは適切な形式に$array変数を変換するために、単純なループを使用することができます。配列の値がフロントエンドから来ている場合は、SQLインジェクションに注意してください。

0

あなたはこのようなあなたのクエリを書くことができます:あなたは必要な数だけ値を追加することができます

select * from table where id in (1, 4, 6, 7) 

0

SELECT WHERE id IN (item1, item2...)です。 PHP配列をループして、配列の配列を構築してください。

9

単にID IN()の構文を使用します。

$sql = "SELECT FROM `table` WHERE `ID` IN (".implode(',',$array).")"; 
0

あなたはIN演算子を使用したいと思う:あなたが使用することができますどのように多くの値上のMySQLには限界があるかもしれません

$sql = 'SELECT FROM WHERE id IN (' . implode(",", $array) . ')';

IN演算子のリスト