2015-06-25 56 views
0

我想要做連接表points_minus並且做一些類似(SUM(p.points) - SUM(m.points)) AS points而不是這樣做的return $points - $this->getMUserPoints($user_id);,這有點兒imo。如果不使用子查詢就可以完成。MySQL - 從兩個不同的表中減去總和

/** 
    * 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

嘗試不同的:

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 = ?) 
+0

第二個工作......但不是那兩個子查詢? – Ciprian

+0

@ciprian,是的,它是子查詢,但它不是相關的子查詢。你必須使用子查詢。你不能這樣做,因爲你會得到meanengless的結果。 –

+0

好的。非常感謝您的幫助。但是就你的知識而言......這比我之前所做的更好嗎?這兩種方法。 .. – Ciprian

相關問題