在MySQL中搜索ID的负载

时间:2012-03-07 00:15:13

标签: php mysql pdo prepared-statement

有没有办法将它放在一个或多个FAST查询中?:

我正在使用PDO :: MySQL

<?php
 $ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
 $results = array();
 $stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id = ?");
 foreach($ids as $id) {
   $stmt->execute(array($id));
   $results[] = $stmt->fetch(PDO::FETCH_ASSOC);
 }
?>

我是否真的必须循环ID,并扩展基本查询,使其显示为:

SELECT a, b, c, FROM table WHERE id = ? OR id = ? OR id = ? //etc

3 个答案:

答案 0 :(得分:2)

我认为你正在寻找语法

... WHERE ID in (1, 3, 4, 5, 6, 7, 23, 24, 26, 28)

答案 1 :(得分:1)

不,你不需要循环。快速而肮脏的解决方案是:

$ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
$stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id IN (?)");
$stmt->execute(implode(',', $id));

但是,推荐的解决方案是将您的ID加载到MySQL表中,然后使用JOIN进行查询。

答案 2 :(得分:1)

您可以使用IN运算符和implode自动执行此操作。它并不比多个OR快,但它确实使您的查询更短,并且它肯定比您现在的多个查询更快。

<?php
 $ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
 $results = array();
 $stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id IN (" . implode(',', $ids) . ")");
 $stmt->execute();
 $results[] = $stmt->fetch(PDO::FETCH_ASSOC);
?>