[英]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.