1

2 つのテーブルのカウント値を取得しようとしており、メンバー ID をキーとして使用して他のテーブルの行をカウントしようとしています。これまでのところこのコードがありますが、comCount には大きな値が出力され、chatCount には空の値が出力されます。これが私のコードです

SELECT members.*
, comments.commenter_id
, cb.user_id
, COUNT(comments.comment) AS comCount
, COUNT(cb.message) AS chatCount
FROM members 
INNER JOIN comments ON members.id = comments.commenter_id
INNER JOIN chat_box AS cb ON members.id = cb.user_id
WHERE members.id ='$profileId'`
4

2 に答える 2

1
SELECT  members.* , 
        a.commenter_id , 
        b.user_id , 
        a.totalComment , 
        b.totalChat
FROM    members 
        INNER JOIN 
        (
            SELECT commenter_id, COUNT(*) totalComment
            FROM comments
            GROUP BY commenter_id
        ) a ON members.id = a.commenter_id
        INNER JOIN 
        (
            SELECT user_id, COUNT(*) totalChat
            FROM chat_box 
            GROUP BY user_id            
        ) b  ON members.id = b.user_id
WHERE   members.id = '$profileId'

SQL Injection補足として、値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。PreparedStatementsを使用すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-14T03:05:21.110 に答える
0
SELECT members.*
, comments.commenter_id
, cb.user_id
,(select  COUNT(1) from comments where commenter_id = members.id) AS comCount
,(select count(1) from chat_box where user_id = members.id) AS chatCount
FROM members 
WHERE members.id ='$profileId'`
于 2013-01-14T03:11:05.893 に答える