2011-10-11 4 views
0

まず、私はPDOを使用しています。私はそれがprepareクエリを使用して行うことができると信じていますが、私はどのように考えている。1つのクエリ内のループからの値

問題は、値を持つ配列があります。これらの値がデータベースに存在するかどうかを確認する必要があります。私は$idがデータベースに存在するかどうかをチェックするために、すべてのループでこのクエリを実行するためにwan'tはありません

foreach($arr as $id) { 
$match =$PDO->query("SELECT `id` FROM `users` WHERE `id` = " . intval($id))->fetch(); 

if(isset($match['id'])) 
//exist 
else 
//not exist. 
} 

:よう

今、それが見えます。 foreachからこれらの値をすべて収集し、データベースに各値が存在するかどうかを確認する1つのクエリを実行する方法はありますか?

答えて

0

// Do query 
$result = $PDO->query("SELECT `id` FROM `users` WHERE `id` IN (".implode(', ',$arr).")"); 

// Loop results (i.e. existing) 
while ($row = $result->fetch()) { 
    // Do exist action here for $row['id'] 
    unset($arr[array_search($row['id'],$arr)]); 
} 

// Loop remaining values in $arr (i.e. not existing) 
foreach ($arr as $notexist) { 
    // Do not exist action here 
} 
+0

ニースの1!ありがとう! – Isarius

2

MySQLは、引数のリストを扱うことができます。

SELECT field FROM table WHERE field IN (value1, value2, value3) 

あなたはIDのあなたの配列からカンマ区切り値のリストを作成し、SQLクエリにそれをプラグインするPHPのjoin()機能を使用することができます。データベースで結果の数をカウントするか、すべての結果を返すかを決めることができます。どちらの場合も、合計で1つのデータベースクエリしかありません。これはどのように