Kommentaranzahl problem

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

  • Kommentaranzahl problem

    Mit folgenden Code lese ich unteranderem die Anzahl der Newskommentare aus:
    PHP-Code:
    mysql_query("SELECT NewsID, DATE_FORMAT(NewsTimestamp, '%d.%m.%Y um %H:%i') NewsDatum,
    NewsTitle, NewsText, UserID, UserName, UserMail, CategorieName, CategorieID,
    Count(*) AS CountComments, CommentsNewsID FROM pms_news, pms_user, 
    pms_categories, pms_comments WHERE NewsUserID = UserID && NewsCategorieID = CategorieID 
    && CommentsNewsID = NewsID GROUP BY NewsID ORDER BY NewsTimestamp DESC LIMIT 0, 15"
    ); 
    Angezeigt werden nur News, wo schon ein Kommentar vorhanden ist. Wie kann ich nun die Abfrage abändern, dass auch News angezeigt werden, wo der NewsID noch nicht in die Spalte CommentsNewsID eingetragen ist?

    mfg martin
    Zuletzt geändert von m4rtin; 21.06.2003, 15:33.

  • #2
    Verknüpfe die Tabellen mit einem LEFT JOIN, dann werden auch die Einträge mit NULL-Werten angezeigt.

    Wie das geht, siehe MySQL-Handbuch:

    http://www.mysql.com/doc/en/JOIN.html

    Kommentar


    • #3
      PHP-Code:
      mysql_query("SELECT NewsID, DATE_FORMAT(NewsTimestamp, '%d.%m.%Y um %H:%i') NewsDatum, 
      NewsTitle, NewsText, UserID, UserName, UserMail, CategorieName,
      CategorieID,
       Count(*) AS CountComments, CommentsNewsID FROM pms_news, pms_user, pms_categories
      LEFT JOIN pms_comments ON NewsID = CommentsNewsID WHERE NewsUserID = UserID 
      && NewsCategorieID = CategorieID && CommentsNewsID = NULL && CommentsNewsID = NewsID 
      GROUP BY NewsID ORDER BY NewsTimestamp DESC LIMIT 0, 15"
      ); 
      Ich habe LEFT JOIN so eingebaut, jedoch werden jetzt gar keine News mehr angezeigt.
      Zuletzt geändert von m4rtin; 21.06.2003, 16:33.

      Kommentar


      • #4
        Original geschrieben von m4rtin
        FROM pms_news, pms_user, pms_categories
        LEFT JOIN pms_comments ON NewsID = CommentsNewsID
        so vergleicht er die spalte NewsID in der tabelle pms_categories mit der spalte CommentsNewsID in der tabelle pms_comments

        rein gefühlsmäßig würd ich sagen, dass die spalte NewsID in der tabelle pms_news steht und du die anordnung der tabellennamen dahingehen ändern solltest
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          es werden noch immer keine News angezeigt.

          PHP-Code:
          mysql_query("SELECT NewsID, DATE_FORMAT(NewsTimestamp, '%d.%m.%Y um %H:%i') NewsDatum, 
          NewsTitle, NewsText, UserID, UserName, UserMail, CategorieName, CategorieID, 
          Count(*) AS CountComments, CommentsNewsID FROM pms_user, pms_categories, 
          pms_news LEFT JOIN pms_comments ON NewsID = CommentsNewsID WHERE NewsUserID = UserID 
          && NewsCategorieID = CategorieID && CommentsNewsID = NULL && CommentsNewsID = NewsID 
          GROUP BY NewsID ORDER BY NewsTimestamp DESC LIMIT 0, 15"
          ); 
          Wenn ich && CommentsNewsID = NULL weglasse, werden wieder die News wie vorher angezeigt. Wobei ich wieder das selbe Problem habe wie im ersten Post von mir beschrieben.

          mfg martin
          Zuletzt geändert von m4rtin; 21.06.2003, 18:25.

          Kommentar


          • #6
            Geh mal nachdem Schema vor, so muss es klappen.
            Die Zuordnung von den Feldern zu den Tables hab ich jetzt der Logik nach verknüpft.

            Von der Eindeutigkeit her wird das die DB jetzt kappieren.
            Du könntest auch nur mal die Relation testen ohne deine zusätzlichen Bedingungen und Pip Pap Po -> vom Groben zum Feinen


            FROM pms_news
            LEFT JOIN pms_comments ON pms_news.NewsID = pms_comments.CommentsNewsID
            [color=blue]MfG Payne_of_Death[/color]

            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
            [color=red]Merke:[/color]
            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

            Murphy`s Importanst LAWS
            Jede Lösung bringt nur neue Probleme
            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

            Kommentar


            • #7
              Original geschrieben von m4rtin
              Wenn ich && CommentsNewsID = NULL weglasse, werden wieder die News wie vorher angezeigt. Wobei ich wieder das selbe Problem habe wie im ersten Post von mir beschrieben.

              mfg martin
              sorry, übersehen

              das is schlicht und ergreifend falsch, mach daraus ein && ISNULL(CommentsNewsID) oder (imho hypscher) AND ISNULL(CommentsNewsID)
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Ich will ja niemanden außer mich zur verzweiflung bringen, aber es will noch immer nicht. Der Code schaut jetzt so aus:
                PHP-Code:
                mysql_query("SELECT NewsID, DATE_FORMAT(NewsTimestamp, '%d.%m.%Y um %H:%i') NewsDatum, NewsTitle,
                 NewsText, UserID, UserName, UserMail, CategorieName, CategorieID, Count(*) AS CountComments,
                 CommentsNewsID FROM pms_user, pms_categories, pms_news LEFT JOIN pms_comments 
                ON pms_comments.CommentsNewsID = pms_news.NewsID WHERE NewsUserID = UserID 
                && NewsCategorieID = CategorieID AND ISNULL(CommentsNewsID) && CommentsNewsID = NewsID 
                GROUP BY NewsID ORDER BY NewsTimestamp DESC LIMIT 0, 15"
                ); 
                Wenn ich jetzt aber dafür das CommentsNewsID = NewsID Werden anscheinend alle News angezeigt die kein Kommentar haben. Obwohl bei Anzahl eine 1 steht. :ugly: :confuse:

                Kommentar


                • #9
                  Code:
                  SELECT NewsID, NewsTitle, COUNT(NewsID), COUNT(CommentsNewsID)
                  FROM pms_news
                  LEFT OUTER JOIN pms_comments
                  ON NewsID=CommentsID
                  WHERE ISNULL(CommentsNewsID)
                  probier das mal aus

                  AND ISNULL(CommentsNewsID) && CommentsNewsID = NewsID
                  wenn CommentsNewsID NULL ist und gleichzeitig identisch mit NewsID, dann ist doch auch NEwsID NULL oder?
                  Wenn NewsID NULL ist, hast du dann ne News?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Der Code funktioniert auch nicht.

                    Das zweite von dir stimmt natürlich. Ich brauch aber halt beides. einmal das alle News angezeigt haben, die eine CommentsNewsID haben und alle News die keine CommentsNewsID haben.

                    Ich bin auch für vorschläge dankbar, wie ich das commentssystem verändern könnte, um es mir leichter zu machen.

                    eigentlich will ich doch nur die anzahl der kommentare habe. da muss doch einen leichteren weg geben!?

                    Kommentar


                    • #11
                      code funktioniert nicht heißt: es kommt gar nix?

                      die anzahl der kommentare zu den news solltest du eigentlich so kriegen

                      Code:
                      SELECT n.NewsID, c.CommentsNewsID, n.NewsTitle, COUNT(c.CommentsNewsID)
                      FROM pms_news n
                      LEFT OUTER JOIN pms_comments c
                      ON n.NewsID=c.CommentsID
                      Code:
                      SELECT n.NewsID, c.CommentsNewsID, n.NewsTitle, COUNT(c.CommentsNewsID)
                      FROM pms_news n
                      LEFT OUTER JOIN pms_comments c
                      ON n.NewsID=c.CommentsID
                      WHERE ISNULL(c.CommentsNewsID)
                      für mal beide abfragen in phpmyadmin aus und poste was rauskommt
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Jetzt werden wieder alle News angezeigt aber die Anzahl stimmt immernoch nicht. Mehr wie 1 Kommentar wird nicht angezeigt oder es sind 0 Kommentare. Bei manchen steht 0 obwohl ein Kommentar vorhanden ist. Jetzt schaut so der Code aus:
                        PHP-Code:
                        mysql_query("SELECT n.NewsID, c.CommentsNewsID, n.NewsTitle, COUNT(c.CommentsNewsID) AS CountComments, 
                        NewsText, UserID, UserName, UserMail, CategorieName, 
                        CategorieID, DATE_FORMAT(NewsTimestamp, '%d.%m.%Y um %H:%i') NewsDatum
                        FROM pms_user, pms_categories, pms_news n
                        LEFT OUTER JOIN pms_comments c
                        ON n.NewsID=c.CommentID 
                        WHERE NewsUserID = UserID && NewsCategorieID = CategorieID GROUP BY n.NewsID 
                        ORDER BY NewsTimestamp DESC LIMIT 0, 15"
                        ); 
                        Wenn ich den Code bei phpmyadmin eingeben, dann erkenne ich, dass die NewsID falsch den CommentsNewsID zugeordnet wird. CommentsNewsID 5 steht beim NewsID 25, 23 und 20 zb. Darum wird auch immer nur eine 1 bei der Anzahl der Kommentare angezeigt. Die ganzen CommentsNewsID 5 müsste halt bei der einen NewsID 5 stehen.
                        Zuletzt geändert von m4rtin; 21.06.2003, 19:50.

                        Kommentar


                        • #13
                          wenn du nur die anzahl de rkommentare zählen willst, lass alle tabellen auser pms_news und pms_comments mal weg

                          wenn du ein group machst, wirst du nie jeden kommentar angezeigt bekommen

                          Code:
                          SELECT n.NewsID, c.CommentsNewsID, n.NewsTitle, COUNT(c.CommentsNewsID)
                          FROM pms_news n
                          LEFT OUTER JOIN pms_comments c
                          ON n.NewsID=c.CommentsID
                          GROUP BY n.NewsID
                          ORDER BY COUNT(c.CommentsNewsID)
                          Ausgabe?

                          Code:
                          SELECT n.NewsID, c.CommentsNewsID, n.NewsTitle, COUNT(c.CommentsNewsID)
                          FROM pms_news n
                          LEFT OUTER JOIN pms_comments c
                          ON n.NewsID=c.CommentsID
                          ORDER BY COUNT(c.CommentsNewsID)
                          Ausgabe?
                          EDIT:
                          Original geschrieben von m4rtin
                          Wenn ich den Code bei phpmyadmin eingeben, dann erkenne ich, dass die NewsID falsch den CommentsNewsID zugeordnet wird. CommentsNewsID 5 steht beim NewsID 25, 23 und 20 zb. Darum wird auch immer nur eine 1 bei der Anzahl der Kommentare angezeigt. Die ganzen CommentsNewsID 5 müsste halt bei der einen NewsID 5 stehen.
                          du vergleichst ja auch NewsID mt CommentID und nicht mit CommentNewsID

                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Es funktionert!!! Du glaubst gar nicht wie dankbar ich dir bin. Ich hatte mich schon die letzten Tage immer wieder mit rumgeschlagen ohne das sich etwas verbessert hat. Du bist mein retter . vielen dank.

                            btw die Ausgabe vom letzten post von dir ist: Invalid use of group function

                            Kommentar

                            Lädt...
                            X