sql >> データベース >  >> RDS >> Mysql

mysqlカウントが正しく機能していませんか?

    SELECTで選択しているすべての列を追加する必要があります c.USER_ID以外の句 GROUP BYへ このような句:

    group by c.ID, c.otherfields, l.title,..
    

    編集: 以下は適切に機能すると思います:

    SELECT count(c.USER_ID) as total_commments_user , 
           c.*, u.NAME, l.TITLE as LINK_TITLE, u.AUTH_IMG
    FROM `PLD_COMMENT` c 
    left outer join `PLD_USER` u ON (u.ID = c.USER_ID) 
    left outer join `PLD_LINK` l ON (l.ID = c.ITEM_ID) 
    group by c.ITEM_ID, c.USER_ID
    ORDER BY c.USER_ID, l.ID 
    

    例: 次のサンプルデータがある場合:

    • PLD_LINK:

      ID   STATUS   TITLE    
      1      1      title1
      2      2      title2
      
    • PLD_USER:

      ID     NAME
      8    Mahmoud
      9     Ahmed
      
    • PLD_COMMENT:

      ID   ITEM_ID USER_ID   STATUS
      4      1        8        1
      5      1        8        1
      6      1        8        1
      7      2        8        2
      8      2        8        2
      9      1        9        1
      10     1        9        1
      

    ケース1:ユーザーMahmoud 2回表示されます:

    次に、前のクエリで、次のように、各ユーザーと各アイテムのコメントの数がわかります。

    total_commments_user  ID  ITEM_ID   USER_ID   Name
             3            4      1         8     Mahmoud
             2            7      2         8     Mahmoud
             2            9      1         9      Ahmed
    

    ユーザーがMahmoudであることに注意してください Item_Idが異なるため、カウントが異なる2回表示されます。

    ケース2:ユーザーMahmoud 一度だけ表示されます:

    すべてのアイテムの各ユーザーのコメント数を取得する場合は、USER_IDのみでグループ化する必要があります。 そしてあなたは得るでしょう:

    total_commments_user  ID  ITEM_ID   USER_ID   Name  
             5            4      1         8     Mahmoud
             3            9      1         9      Ahmed
    

    ご覧のとおり、ユーザーMahmoud Item_Idを使用したため、表示されるのは1回だけです。

    その後、ステータスなどでフィルタリングできます。



    1. JavaとPortgreSQL間の不正なレコードMACSSLエラー

    2. あるテーブルから別のテーブルへの値の挿入

    3. Postgres Insert Into View Rule with Returning Clause

    4. InnoDBでCOUNTをまとめて回避する必要がありますか?