2010-11-13 8 views
8

3 tablolar var:MySQL SOL JOIN ve COUNT()

  1. forumları

kimliği, ad, açıklama

  1. adet başlık

thread_id, forum_id, user_id, başlık, içerik, görünümler

  • mesaj
  • Post_id, thread_id, AUTHOR_ID, içerik, tarih

      Yapmak istediğim konu, bir forumdaki tüm konulara ulaşmak ve her iş parçacığının mesaj sayısını almaktır. Bu yüzden her iş parçacığı (WHERE forum_id = neyse) alıyorum ve sonra sonuçları saymak için tablo yayınları ile birlikte LEFT JOIN. Ama bir şey çalışmıyor.

      SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
          FROM 
          threads t 
          LEFT JOIN 
          users u 
          ON 
           u.id = t.user_id 
          LEFT JOIN 
          posts p 
          ON 
           p.thread_id = t.thread_id 
          WHERE 
          t.forum_id = $this->forumID 
      

      Bu sorgu sadece (Sanırım) üzerinde herhangi bir yayını olan konuları gösterecektir: İşte benim sorgusu olur. Ben de

      Bunu nasıl çözebilir ... Bu MySQL hata yapar ama BY ifadesi GROUP kullanarak çalıştı?

      ----------- DÜZENLEME: Daha önce söylediğim gibi ben ancak t.thread_id GROUP BY ekleyerek çalıştı , MySQL hataları:

      Bir hata var SQL sözdizimi; yakın kullanma hakkı sözdizimi için MySQL sunucu sürümü ile uyumlu kılavuzu 'NEREDE t.forum_id = 2' hattında 15

      Tam sorgusu:

      SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
          FROM 
          threads t 
          LEFT JOIN 
          users u 
          ON 
           u.id = t.user_id 
          LEFT JOIN 
          posts p 
          ON 
           p.thread_id = t.thread_id 
          GROUP BY 
          t.thread_id 
          WHERE 
          t.forum_id = $this->forumID 
      

      DÜZENLEME 2:

      Kötü, GROUP BY ifadesini koymak istediğim yere koyuyorum. Şimdi çözüldü.

    cevap

    10

    GRUBU TARAFINDAN yüzden sadece eklemek Gidilecek doğru yolu oldu: GROUP BY t.thread_id

    0

    Sen eklemek gerekir GROUP BY t.thread_id, u.nick