我这里有两张桌子。
log
(代表日志)act
(代表行动)登录
包含以下列:logid
,userid
,actid
行为
包含列:actid
,amount
金额代表用户(userid
)在日志(actid
)中插入相应的log
时收到的点数(例如700或5中的50)。< / p>
我想要实现的是,当您搜索userid
1时,log
中选择了userid = 1
的所有行。然后,从这些选定的log
行中,应在表actid
中查找act
,并且amount
s应该相加。
简而言之:
选择log
- userid = 1
从这些行中获取所有actids
在amount
表中找到匹配的act
总结所有这些amounts
我从这个问题开始:
SELECT log.logid, log.userid, log.actid, act.actid, act.amount
FROM log
JOIN act
ON act.actid = log.actid
WHERE log.userid = '1'
这给了我一张桌子(其中包括)
userid |量
--- 1 ---- | --20 ---
--- 1 ---- | --40 ---
--- 1 ---- | --- 5 ---
--- 1 ---- | --10 ---
现在我想sum
所有这些金额并回应总数,但不幸的是我无法找到有效的查询。
修改
我使用了火影忍者提供给我的这些数额的查询。这就像一个魅力吧!查询:
SELECT log.userid, sum(act.amount) FROM log JOIN act ON act.actid = log.actid WHERE log.userid = '1'
我接下来要尝试的不仅是使用userid = 1
来自用户的总和金额,还要获取user
- 表中其他用户的总金额。之后,我想在以下查询中使用这些总和金额:
$result = $mysqli->query("SELECT * FROM `db`.`user` ORDER BY `summed_amount` DESC");
其中summed_amount
是火影忍者查询生成的总和金额。
答案 0 :(得分:2)
MySQL有一个名为sum()的聚合函数,可以对所有记录求和。
所以你的查询将是
SELECT log.userid, sum(act.amount) FROM log JOIN act ON act.actid = log.actid WHERE log.userid = '1'
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_sum
答案 1 :(得分:1)
要通过单个查询获取所有用户的总和,请使用group by子句。这将计算每个用户的amaount总和并返回结果。
SELECT log.userid, sum(act.amount) FROM log JOIN act ON act.actid = log.actid group by log.userid
编辑: - 通过desc获取订单
SELECT log.userid,sum(act.amount)FROM log JOIN act on act.actid = log.actid group by log.userid order by sum(act.amount)desc