2012-06-12 4 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
귀하의 하위 쿼리가 one_msg에 존재하지 않는 대신 post_iduser_id (확인해야합니다, 그래서 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 

관련 문제