2012-03-07 92 views
0

ID的負荷有我使用的是PDO :: MySQL的搜索在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); 
} 
?> 

難道我真的要放這一個方式,或者多個快速查詢?:

環標識的,並與擴展基本的查詢,使其顯示爲:

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

回答

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表,然後做一個連接的查詢。

2

我認爲你正在尋找的語法

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

+1

更快990ms ... – 2012-03-07 00:18:42

1

您可以使用IN運算符和implode爲您自動執行此操作。它不會比多個OR s更快,但它的確會縮短查詢時間,而且確實比現在的多個查詢更快。

<?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); 
?>