2014-02-10 91 views
2

我經常需要檢索結果並通過給定列訪問它們。PHP約定檢索由特定列索引的結果?

有沒有一種方法可以在不需要每次遍歷整個數據集的情況下編寫它?

我研究了各種PDO獲取模式,但沒有比這更簡單的跳出來。謝謝。

function get_groups() { 
    $stmt = $dbc->prepare("SELECT * FROM groups ORDER BY group_name"); 
    $stmt->execute(); 

    $groups = $stmt->fetchAll(); 

    $return = []; 

    foreach($groups as $group) { 
    $return[$group['id']] = $group; 
    } 

    return $return; 
} 
+0

你想要用作數組鍵的數據庫ID? – 2014-02-10 20:20:38

+0

[不,不是真的](http://stackoverflow.com/questions/5361716/is-there-a-way-to-fetch-associative-array-grouped-by-the-values-of-a-specified- c),除非你有一個簡單的密鑰對你想創建。 – Wrikken

+0

@Wrikken,在你的鏈接問題中,我真的不明白什麼建議不要將數據庫唯一標識符作爲數組鍵。謹慎解釋一下爲什麼這樣會很糟糕? –

回答

2

我建議的解決方案相當陳舊。正確的解決方案來自this answer

$stmt = $pdo->query("SELECT foo,baz FROM bar") 
$groupedByFooValuesArray = $stmt->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE) 

分組它被另一列中,更改第一列選擇


如果你的目標是讓你的同一陣列由不同的列值索引,我覺得唯一的選擇是通過不同的列值對它們進行實際索引。

你可以做,通過控制該領域的陣列返回

function get_groups($sql,$key,$values='') { 
    if ($values != '') { 
    $stmt = $dbc->prepare($sql); 
    $stmt->execute($values); 
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    } 
    else { 
    $rows = $dbc->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
    } 
    foreach ($rows as $row) { 
    $indexed[$row[$key]] = $row; 
    } 
    return $indexed; 
} 

然後,使用get_groups建立一個索引數組:

$sql = 'SELECT * FROM groups ORDER BY group_name' 
var_dump(get_groups($sql,'id')); 

可能有辦法以某種方式存儲一個結果集,你可以多次,這將是非常棒的。但我不知道。