PDO SELECT 列正确

Posted

技术标签:

【中文标题】PDO SELECT 列正确【英文标题】:PDO SELECT Columns correctly 【发布时间】:2015-11-16 12:29:10 【问题描述】:

我疯狂地用谷歌搜索,但没有找到我想要做的事情的答案。我需要查询我的数据库并获取信息,但还需要根据另一列是否具有相同的值来对一列求和。

    $data = $pdo->prepare("SELECT `name`, SUM(`cost`) FROM `donations` WHERE `name` = `name` ORDER BY `cost` DESC");
    $data->execute();
    $data->setFetchMode(PDO::FETCH_ASSOC);

我需要它来将列中“名称”相同的所有“成本”相加。

【问题讨论】:

SELECT name, SUM(cost) FROM donations ORDER BY cost DESC? 使用“按名称分组”。 您是否询问如何对 name 列不唯一的所有记录的 cost 列求和? @skeggse 总结一下。 【参考方案1】:
$data = $pdo->prepare("SELECT `name`, SUM(`cost`) FROM `donations` WHERE `name` = ? GROUP BY name ORDER BY `cost` DESC");

添加GROUP BY 子句: https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

【讨论】:

获取 SQL 错误。 Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound 您需要将?绑定到一个参数。 php.net/manual/en/pdo.prepare.php 我认为他想要的是获得***捐赠者,而不是找到 1 人捐赠了多少 不,我想得到一个人捐赠的总金额。 @JoshuaNightingale 所以你有一些页面可以输入一个人的名字(或其他标识符),你只是想得到那个人捐赠的总额和他们的名字?我建议您编辑原始问题以反映这一点。【参考方案2】:
$data = $pdo->prepare("SELECT `name`, SUM(`cost`) AS `cost` FROM `donations` GROUP BY `name` ORDER BY `cost` DESC";

这是我想要的输出方式,但我不确定它是否正确,有人可以解释一下“AS cost”到底在做什么吗?

【讨论】:

AS cost 重命名结果列。 PDO 通常会返回一个笨拙的条目$row["SUM(cost)"],因为它被指定为 SELECT 表达式。 … AS … 将函数调用重命名为别名,从而返回更整洁的结果列键。 如果它解决了你的问题,你应该接受你的答案。 直到明天才能接受我的回答,但我会接受的。

以上是关于PDO SELECT 列正确的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO 没有从 .mdb 表返回正确的数据

PHP:分配后的值不正确

无法从 SELECT 返回多行以按特定列正确汇总

SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中

如何正确设置 PDO 连接

什么是正确的 PDO 语法 [重复]