我想加入表points_minus
并执行类似(SUM(p.points) - SUM(m.points)) AS points
的操作,而不是执行此return $points - $this->getMUserPoints($user_id);
,这有点像imo。如果可以在不使用可能很棒的子查询的情况下完成。
/**
* 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;
}
到目前为止......但它返回了一个负数:
"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"))
答案 0 :(得分:0)
尝试分开:
select sum(points)
from (select points from points_plus where user_id = ?
union all
select -points from points_minus where user_id = ?) t
另一个版本,但我不确定这是MySql
的正确语法:
select (select sum(points) from points_plus where user_id = ?) -
(select sum(points) from points_minus where user_id = ?)