Zählen von abgegbenen Kommentaren eines Users an verschiedene User

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zählen von abgegbenen Kommentaren eines Users an verschiedene User

    Hallo!

    Folgende Problemstellung:
    Ein User mit der Id x meldet sich in einem Kommentarsystem an. Er hat dort die Möglichkeit zu allen andern Usern Kommentare abzugeben. Eine Userliste soll nun die Namen aller User + Die Anzahl der Kommentare, die der eingeloggte User, zu dem jeweiligen User abgeben hat anzeigen.

    Beispieltabellen:
    Code:
    Tabelle user:
    
    id | name
    -----------
    1  | Max
    2  | Moritz
    3  | Hinz
    4  | Kunz
    
    Tabelle kommentar:
    
    id | autor_id | empfaenger_id | text
    -------------------------------------
    1  | 2        | 3             | Text1
    2  | 4        | 2             | Text2
    3  | 2        | 1             | Text3
    4  | 2        | 3             | Text4
    Angenommen, User 2 (Moritz) ist eingeloggt, dann hätte ich gerne folgendes Ergebnis:
    Code:
    id | name   | anzahl
    ------------------
    1  | Max    | 1
    2  | Moritz | 0
    3  | Hinz   | 2
    4  | Kunz   | 0
    Ich krieg noch nichtmal eine Abfrage hin, die mir Ausgiebt wieviele Kommentare die User allgemein bekommen haben. Ich habs mit LEFT OUTER JOIN probiert, Problem ist nur, dass dann auch die User, die keinen Kommentar bekommen haben, als Anzahl 1 erhalten. Sobald ich dann versuche author_id zu beschränken geht das aber eh schon nicht mehr.

    Helft mir bitte
    xblax

  • #2
    COUNT()
    GROUP BY

    Den JOIN brauchst du ja nur für die Zuordnung der Namen. Lass das erstmal weg, und lass die nur ID und die Counts anzeigen.

    Kommentar


    • #3
      Ja aber das löst mein Problem nicht. Mit
      Code:
      SELECT `kommentar`.`empfaenger_id`, COUNT(*) as anzahl FROM `kommentar` 
      WHERE `kommentar`.`autor_id` = 2 
      GROUP BY `kommentar`.`empfaenger_id`
      bekomme ich als Ergebnis:
      Code:
      empfaenger_id | anzahl
      ----------------------
      1             | 1
      3             | 2
      Jetzt noch die Namen zuzuordnen wäre kein Problem. Ich brauche aber auch noch die User in der Liste, die vom gerade eingeloggten User (hier: id = 2 ) noch keinen Kommentar bekommen haben bzw. gar nicht in der kommentar Tabelle auftauchen, folglich mit der Anzahl 0 (siehe gewünschtes Ergebnis oben)
      Zuletzt geändert von xblax; 13.12.2008, 00:38.

      Kommentar


      • #4
        Ja, kein Problem.

        Setzte nen JOIN von der Namens-Tabelle VOR die Kommentar-Tabelle. Kriterium ist die ID.

        Kommentar


        • #5
          Code:
          SELECT
             empfaenger_id,
             COUNT(*) as anzahl,
             if(count(*)=NULL,'0','1') as count_null
          FROM kommentar
          WHERE autor_id = 2 
          GROUP BY empfaenger_id
          ungetestet
          Gruß
          Uzu

          private Homepage

          Kommentar


          • #6
            Ok ich denke jetzt bin ich dahinter gekommen

            Code:
            SELECT `user`.`id`, `user`.`name`, COUNT(`kommentar`.`empfaenger_id`) as anzahl
            FROM `user`
            LEFT OUTER JOIN `kommentar` ON `user`.`id` = `kommentar`.`empfaenger_id`
            WHERE `kommentar`.`autor_id` = 2 OR `kommentar`.`autor_id` IS NULL
            GROUP BY `user`.`id`
            Mir war vorallem nicht klar, dass in das COUNT() noch was rein muss, was aus der kommentar-Tabelle kommt, damit ich die richtige Anzahl bekomme.
            Irgendeine Idee, wie ich das Ganze noch effektiver abfragen kann?

            Kommentar


            • #7
              Original geschrieben von xblax
              Ok ich denke jetzt bin ich dahinter gekommen

              Code:
              SELECT `user`.`id`, `user`.`name`, COUNT(`kommentar`.`empfaenger_id`) as anzahl
              FROM `user`
              LEFT OUTER JOIN `kommentar` ON `user`.`id` = `kommentar`.`empfaenger_id`
              WHERE `kommentar`.`autor_id` = 2 OR `kommentar`.`autor_id` IS NULL
              GROUP BY `user`.`id`
              Mir war vorallem nicht klar, dass in das COUNT() noch was rein muss, was aus der kommentar-Tabelle kommt, damit ich die richtige Anzahl bekomme.
              Irgendeine Idee, wie ich das Ganze noch effektiver abfragen kann?
              kleiner tipp um deine abfragen ein wenig kleiner zu gestalten

              SELECT kommentar.id, kommentar.e_id FROM kommentar WHERE ....

              Damit würde ICH mir die finger brechen

              SELECT u.id, k.id, k.e_id FROM kommentar k, user u WHERE ....

              verstehst du es?
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                Stimmt, das wär einfacher
                Kenn ich schon, aber hab ich nicht dran gedacht.

                Habs jetzt jedenfalls ganz nach meinen Wünschen hinbekommen.
                Danke an alle

                Kommentar

                Lädt...
                X