Значения из цикла в одном запросе - PullRequest
0 голосов
/ 11 октября 2011

Прежде всего, я использую PDO.Я считаю, что это можно сделать с помощью запроса prepare, но я не знаю, как.

Проблема в том, что я получил массив со значениями, и мне нужно проверить, существуют ли эти значения в базе данных.

Прямо сейчас это выглядит так:

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

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

Я не хочу запускать этот запрос в каждом цикле, чтобы проверить, существует ли $id в базе данных.Так есть ли способ собрать все эти значения из foreach, а затем выполнить один запрос, чтобы проверить, существует ли каждое значение в базе данных?

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

MySQL может обрабатывать списки аргументов:

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

Вы можете использовать функцию PHP join(), чтобы создать список значений, разделенных запятыми, из вашего массива идентификаторов и вставить их в запрос SQL. Вы можете решить, хотите ли вы, чтобы база данных подсчитывала количество результатов или просто возвращала их все. В любом случае у вас будет только один запрос к базе данных.

0 голосов
/ 11 октября 2011

Как насчет этого:

// 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...