0

$oneidに基づいて待機テーブルからすべてのユーザーを取得するクエリがあります。これは問題なく機能しますが、ユーザーが残したメッセージの数を数えたいと思います。これらは別のテーブル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,
                    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 ) );
4

1 に答える 1

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
于 2012-06-12T07:27:47.957 に答える