从联接表

时间:2015-12-06 17:43:54

标签: php mysql join sum

我这里有两张桌子。

  • log(代表日志)
  • act(代表行动)

登录

包含以下列:logiduseridactid

行为

包含列:actidamount

金额代表用户(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是火影忍者查询生成的总和金额。

2 个答案:

答案 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

相关问题