2014-02-10 55 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')); 

可能有办法以某种方式存储一个结果集,你可以多次,这将是非常棒的。但我不知道。