我正在使用 SUM 参数查询数据库,以汇总数据库表中的一列。因此,例如,在不使用 SUM 参数的情况下,我得到以下信息:
UserID | Name | Email | points
-------+--------+------------------+-------
1 | name 1 | email1@email.com | 5
1 | name 1 | email1@email.com | 8
1 | name 1 | email1@email.com | 2
2 | name 2 | email2@email.com | 8
2 | name 2 | email2@email.com | 8
3 | name 3 | email3@email.com | 3
4 | name 4 | email4@email.com | 9
以上代码中使用的SQL语句:
SELECT *
FROM db_tbl
ORDER BY points DESC
我想要实现的是:
示例
UserID | Name | Email | points
-------+--------+------------------+-------
1 | name 1 | email1@email.com | 15
2 | name 2 | email2@email.com | 16
3 | name 3 | email3@email.com | 3
4 | name 4 | email4@email.com | 9
正在测试的SQL语句:
SELECT user_id, name, email, SUM(points)
FROM db_tbl
ORDER BY points DESC
我遇到的问题是,当我将SQL语句更改为使用SUM
时,它会生成
警告:在第27行使用未定义的常数点-假定为“点”(这将在以后的PHP版本中引发错误)
此查询示例还用单词 points 替换了点int。
我仍在学习PHP,并在下面发布了完整的代码以供参考。
function ctlTopUsers() {
global $wpdb;
$result = $wpdb->get_results ( "SELECT user_id, name, email, SUM(points) FROM db_tbl order by points DESC" );
foreach ( $result as $print ) {
echo '<table border="1">';
echo '<tr>';
echo '<th>Name</th>';
echo '<th>Email</th>';
echo '<th>Points</th>';
echo '</tr>';
echo '<tr>';
echo '<td>' . $print->name.'</td>';
echo '<td>' . $print->email.'</td>';
echo '<td>' . $print->points.'</td>';
echo '</tr>';
echo '</table>';
}
}
与第27行有关的错误可能是这些点的回波。
谢谢!
答案 0 :(得分:4)
您将需要在SUM列中添加一个别名,以获得名称points
...
$result = $wpdb->get_results ( "SELECT user_id, name, email, SUM(points) as points FROM db_tbl order by points DESC" );
您可能会发现名称类似于SUM(points)
,但添加别名会更容易。
答案 1 :(得分:3)
您的查询有几个问题:
从db_tbl中按DESC点顺序选择user_id,名称,电子邮件,SUM(点)
表中不存在列/表达式points
。您可能想订购为:order by SUM(points) DESC
。您看到区别了吗?
您正在对行进行分组(使用SUM()
),却忘记了使用GROUP BY
子句指定要对哪些列进行分组。
总而言之,您的“合法”查询应为:
SELECT user_id, name, email, SUM(points)
FROM db_tbl
GROUP BY user_id, name, email -- added GROUP BY
ORDER BY SUM(points) DESC -- uses an existing expression
MySQL对正确的语法非常宽容,并且允许您以不完整的方式编写查询。我建议使用正确的(完整的)表格,因为那是适用于大多数数据库的表格。
答案 2 :(得分:0)
您可以使用此查询
SELECT `UserID`, `Name`, `Email`,SUM(`points`) As total
FROM `data` GROUP BY `UserID` ORDER BY SUM(`points`) DESC