有没有办法将它放在一个或多个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
答案 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);
?>