我经常需要检索结果并通过给定列访问它们。
有没有办法在不每次遍历整个数据集的情况下编写此内容?
我研究了各种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 :(得分: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'));
可能有一种方法以某种方式存储结果集,您可以fetchAll()
多次,这将是非常棒的。但我不知道。