我有这个问题:
$all = $dbh->query("SELECT DISTINCT movimenti.nome, SUM(movimenti_carta.importo)
FROM movimenti_carta JOIN movimenti ON movimenti_carta.movimento=movimenti.id
WHERE month(data)='$mese' AND year(data)='$anno' GROUP BY movimenti.nome");
它从我的数据库中检索两列。我想要做的是将每列放在一个单独的数组中。 如果我这样做:
$labels=$all->fetchAll(PDO::FETCH_COLUMN,0);
我使用我正在寻找的格式获取第一列的值。 我试着这样做:
$values=$all->fetchAll(PDO::FETCH_COLUMN,1);
第一次获取后但第一次获取未设置$all
,结果是$values
是一个空数组(我很确定这一点,但确实试了一下)。
在我用两个列获取数组之后,我可以在php中构建数组,但我想知道如何使用PDO API来实现我的目标。
答案 0 :(得分:3)
当然它永远不会以这种方式工作,因为fetchAll()只返回一次数据。
我能想到的唯一想法是PDO::FETCH_KEY_PAIR常数:
$data = $all->fetchAll(PDO::FETCH_KEY_PAIR);
$labels = array_keys($data);
$values = array_values($data);
答案 1 :(得分:3)
感觉你过于复杂了。它可以在PHP中轻松完成,如果您只使用PDOStatement::fetch
,则不必担心数组操作;如果您有大量数据,它对您的内存使用也会更友好。
$labels = [];
$values = [];
while ($row = $all->fetch(PDO::FETCH_NUM)) {
$labels[] = $row[0];
$values[] = $row[1];
}
答案 2 :(得分:2)
也许你可以使用array_column。
$all = $dbh->query("
SELECT DISTINCT movimenti.nome, SUM(movimenti_carta.importo) AS importo
FROM movimenti_carta
JOIN movimenti ON movimenti_carta.movimento=movimenti.id
WHERE month(data)='$mese'
AND year(data)='$anno'
GROUP BY movimenti.nome
");
// set of results indexed by column name
$results = $all->fetchAll(PDO::FETCH_ASSOC);
// set of values from the column 'nome'
$nomes = array_column($results, 'nome');
// set of values from the column 'importo'
$importos = array_column($results, 'importo');