简体   繁体   English

MySQL-从两个不同的表中减去总和

[英]MySQL - Subtract sums from two different tables

I would like to do join table points_minus and do something like (SUM(p.points) - SUM(m.points)) AS points instead of doing this return $points - $this->getMUserPoints($user_id); 我想加入表points_minus并做类似(SUM(p.points) - SUM(m.points)) AS points的事情,而不是这样做return $points - $this->getMUserPoints($user_id); which is a bit much imo. 这有点imo。 And if it can be done without using sub queries that would be great. 如果不使用子查询就可以完成,那将是很好的选择。

    /**
    * Get plus user points.
    *
    * @param (int) $user_id
    */
    public function getUserPoints($user_id) {
        if($q = $this->db->mysqli->prepare("SELECT SUM(points) FROM points_plus WHERE user_id = ?"))
        {
            $q->bind_param("i", $user_id);
            $q->execute();

            $q->bind_result($points);

            $q->fetch();
            $q->close();
            return $points - $this->getMUserPoints($user_id);
        }
            return false;
    }


    /**
    * Get minus user points.
    *
    * @param (int) $user_id
    */
    public function getMUserPoints($user_id) {
        if($q = $this->db->mysqli->prepare("SELECT SUM(points) FROM points_minus WHERE user_id = ?"))
        {
            $q->bind_param("i", $user_id);
            $q->execute();

            $q->bind_result($points);

            $q->fetch();
            $q->close();
            return $points;
        }
            return false;
    }

Got this far ... but it's returning a negative number: 到此为止...但是它返回一个负数:

"SELECT (SUM(p.points) - SUM(m.points) )
FROM points_plus p
LEFT JOIN
points_minus m 
ON p.user_id = m.user_id
WHERE p.user_id = ?
GROUP BY p.user_id"))

Try to separate: 尝试分开:

select sum(points) 
from (select points from points_plus where user_id = ?
      union all
      select -points from points_minus where user_id = ?) t

Another version, but I am not sure if this is correct syntax for MySql : 另一个版本,但是我不确定这是否是MySql正确语法:

select (select sum(points) from points_plus where user_id = ?) -
       (select sum(points) from points_minus where user_id = ?)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM