检索由特定列索引的结果的PHP约定?

时间:2014-02-10 20:18:33

标签: php mysql pdo

我经常需要检索结果并通过给定列访问它们。

有没有办法在不每次遍历整个数据集的情况下编写此内容?

我研究了各种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;
}

1 个答案:

答案 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()多次,这将是非常棒的。但我不知道。