2010-09-30 50 views
1

如果我想獲得某個品牌的product_ids列表。我會這樣做:從數據庫值填充數組的最有效方法?

$id_list = array(); 
$qry = 'SELECT product_id FROM products WHERE product_brand = :brand'; 
$STH = $this->pdo->prepare($qry); 
$STH->execute(array("brand" => $brand)); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
while($row = $STH->fetch()) 
{ 
    $id_list[] = $row['product_id']; 
} 

有更快更有效的方法嗎?看起來如果我只選擇1列,應該有更好的方法來選擇/插入到數組中。

+0

你有任何理由要問這樣的問題? – 2010-09-30 20:24:33

+0

@Col。彈片,是的。我對不同類型的產品有不同的表格。因此,爲了生成具有特定條件的所有product_id的列表,我需要在每個表上運行類似上面的內容。 (它們都綁在基表上,所以ID不重疊)。因此,我要在每個產品類型表中搜索符合條件的產品,並將結果存儲在一個數組中。然後,一旦我有一個所有匹配的產品ID的數組。我將通過它們循環並將它們傳遞到我的產品類中,以便將它們列在頁面上。 – 2010-09-30 20:31:10

+0

..所以既然我打算多次(在不同的表格上)進行上述調用,我希望儘可能提高效率。 – 2010-09-30 20:31:43

回答

4
$STH->setFetchMode(PDO::FETCH_COLUMN,0); 
$id_list = $STH->fetchAll(); 

它真的快嗎?恆指:

$ cat 1.php 
<?php 
$d = new PDO('mysql:localhost'); 
$qry = 'SELECT SQL_NO_CACHE bar FROM test.foo'; //for completeness sake: foo has 400 rows 
$stmt = $d->query($qry); 
$stmt->setFetchMode(PDO::FETCH_COLUMN,0); 
$check = $stmt->fetchAll(); 
?> 
$ cat 2.php 
<?php 
$d = new PDO('mysql:localhost'); 
$qry = 'SELECT SQL_NO_CACHE bar FROM test.foo'; //for completeness sake: foo has 400 rows 
$stmt = $d->query($qry); 
$check = array(); 
$stmt->setFetchMode(PDO::FETCH_ASSOC); 
while($row = $stmt->fetch()){ 
     $check[] = $row['bar']; 
} 
?> 
$ time (for i in {1..100}; do php 1.php; done;) 

real 0m4.507s 
user 0m2.392s 
sys  0m1.288s 
$ time (for i in {1..100}; do php 2.php; done;) 

real 0m6.830s 
user 0m3.352s 
sys  0m2.328s 

..所以,至少這個腳本差,我的服務器上,速度更快...

+0

+1真棒,謝謝!我知道必須有東西......問題是,這是否更快或只需要更少的打字? – 2010-09-30 20:17:18

+0

嗯,創建的數組少了,我認爲它可以忽略不計,但我會在幾分鐘內得到一個基準。 – Wrikken 2010-09-30 20:20:07

+0

哦不。 Wrikken和他訓練有素的zillion迭代再次測試。 – 2010-09-30 20:26:42

相關問題