我经常需要检索结果并按给定列访问它们。
有没有一种方法可以不用每次都遍历整个数据集来编写它?
我研究了各种 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;
}
我提出的解决方案已经过时了。正确的解决方案来自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);
}
khác {
$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()
它,那会很棒。但我不知道。
Tôi là một lập trình viên xuất sắc, rất giỏi!