2012-06-12 64 views
0

我有一個基於$ oneid從等待表抓取所有用戶的查詢。這工作得很好,但我想數一個用戶離開多少消息。這些在另一個表one_msg中。來自第二個表的Mysql計數

function waiting_users($oneid) 
    { 

    $query_str ="SELECT a.user_id, b.email, b.username, b.fbook, c.user_id as saved_user, d.type as user_type, 
        FROM wait a 
        LEFT JOIN users b ON a.user_id=b.id 
        JOIN user_profiles d ON a.user_id=d.user_id 
        LEFT JOIN save_one c ON a.user_id=c.user_id AND c.one_id=? 
        WHERE a.post_id = ? 
        ORDER BY a.date ASC"; 
} 
      $query = $this->db->query($query_str, array($oneid, $oneid)); 

one_msg表

+----+--------+---------+---------+---------------------+ 
| id | one_id | host_id | user_id | date    | 
+----+--------+---------+---------+---------------------+ 
| 3 | 127 |  268 |  270 | 2012-06-11 18:57:58 | 
| 4 | 127 |  268 |  270 | 2012-06-11 21:45:11 | 
| 5 | 127 |  268 |  270 | 2012-06-12 09:10:01 | 
+----+--------+---------+---------+---------------------+ 

所以我試圖從計數one_msg這樣的消息,但它的返回爲所有用戶相同的值。

function waiting_users($oneid) 
    { 

    $query_str ="SELECT a.user_id, b.email, b.username, b.fbook, c.user_id as saved_user, d.type as user_type, 
        (SELECT COUNT(id) FROM one_msg WHERE post_id = ?) AS count 
        FROM wait a 
        LEFT JOIN users b ON a.user_id=b.id 
        JOIN user_profiles d ON a.user_id=d.user_id 
        LEFT JOIN save_one c ON a.user_id=c.user_id AND c.one_id=? 
        WHERE a.post_id = ? 
        ORDER BY a.date ASC"; 

} 
      $query = $this->db->query($query_str, array($oneid, $oneid, $oneid)); 

回答

1

你的子查詢應檢查user_id,而不是post_id(其中不存在one_msg,所以它是從wait採取:中

(SELECT COUNT(id) FROM one_msg m WHERE m.user_id = a.user_id) AS count 

代替

(SELECT COUNT(id) FROM one_msg WHERE post_id = ?) AS count 
相關問題