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);
我需要它来将列中“名称”相同的所有“成本”相加。
【问题讨论】:
SELECTname
, 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 列正确的主要内容,如果未能解决你的问题,请参考以下文章