[MySQL 4.1] NEWSSYSTEM - Kommentare zählen !

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

  • [MySQL 4.1] NEWSSYSTEM - Kommentare zählen !

    Servus zusammen.
    Also ich bin gerade dabei ein Newssystem mit smarty zu basteln.

    Bisher habe ich folgenden PHP CODE für die Abfrage der News:
    PHP-Code:
     $sql =  "SELECT
                    tmb_news.id,
                    tmb_news.kategorie,
                    DATE_FORMAT(tmb_news.datum, ' "
    .DATUMSFORMAT." ') AS datum,
                    tmb_news.titel,
                    tmb_news.anfang,
                    tmb_news.inhalt,
                    tmb_members.nick,
                    tmb_members.email
                FROM 
                    tmb_news,
                    tmb_members
                WHERE
                    (tmb_news.autor = tmb_members.id)
                ORDER BY
                    tmb_news.datum DESC
                LIMIT 10"
    ;

      
    $query  = @mysql_query($sql) OR print (mysql_error());
      
    $news = array(); // leeres Arrayelement erzeugen

      
    while ($row mysql_fetch_assoc($query))
      { 
    $news[] = $row; }
      
    $smarty->assign('newsarray'$news); 
    Soweit geht das auch prima.
    Jetzt müsste ich allerdings in dieses array noch die Anzahl der Kommentare einfügen.
    Diese befinden sich in
    tmb_news_kommentare
    - id
    - id_news
    - name
    - homepage
    - email
    - inhalt
    - datum
    - ip

    Also müsste ich jetzt passend zu der NewsID die Kommentare zählen.
    Weiter als so bin ich allerdings nicht gekommen:
    PHP-Code:
    SELECT COUNTtmb_news_kommentare.id_news 
    FROM tmb_news_kommentare
    WHERE 
    (tmb_news_kommentare.id_news 1
    Naja allerdings müsste das in den Code oben mit rein und statt der 1 müsste natürlich die entsprechende news.id stehen !
    [color=blue]THE MAD BOYS[/color]

    Wer anderen eine Bratwurst brät hat ein Bratwurstbratgerät.

  • #2
    so müsste das hinhauen:

    SELECT n.*, DATE_FORMAT(n.datum, ' ".DATUMSFORMAT." ') AS datum,
    m.nick, m.email[color="blue"], count(k.*) as kommentaranzahl[/color]
    FROM tmb_news n, tmb_members m
    [color="blue"]LEFT JOIN tmb_news_kommentare k on k.id_news=n.id[/color]
    WHERE n.autor=m.id
    [color="blue"]GROUP BY n.id[/color]
    ORDER BY n.datum
    LIMIT 10
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Mal abgesehen davon das ich da nicht durchblicke war das wohl nich ganz das wahre !
      PHP-Code:
      SELECT n. * , DATE_FORMATn.datum' ".DATUMSFORMAT." ' ) AS datumm.nickm.emailcountk. * ) AS kommentaranzahl
      FROM tmb_news n
      tmb_members m
      LEFT JOIN tmb_news_kommentare k ON k
      .id_news n.id
      WHERE n
      .autor m.id
      GROUP BY n
      .id
      ORDER BY n
      .datum
      LIMIT 10 

      MySQL meldet



      Fehler in der Syntax bei '*  )  AS kommentaranzahl
      FROM tmb_news n, tmb_members m
      LEFT  JO' 
      in Zeile 1. 
      Muss ich da noch was ersetzen ???
      [color=blue]THE MAD BOYS[/color]

      Wer anderen eine Bratwurst brät hat ein Bratwurstbratgerät.

      Kommentar


      • #4
        Wenn die Kommentar-Tabelle auch einen PrimaryKey (id) oder eine laufende Nummer hat, ersetz mal den * im count durch den Spaltennamen.
        oder versuch´s mit * statt k.*
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          hab mal wieder Zeit gefunden dran rumzubasteln

          Des Rätsels Lösung:
          PHP-Code:
          SELECT
                          n
          .id,
                          
          n.kategorie,
                          
          DATE_FORMAT(n.datum' ".DATUMSFORMAT." ') AS datum,
                          
          n.titel,
                          
          n.anfang,
                          
          n.inhalt,
                          
          m.nick,
                          
          m.email,
                          
          COUNTk.id_news ) AS Kommentare
                      FROM 
                          tmb_news n
          ,
                          
          tmb_members m
          --->            LEFT JOIN tmb_news_kommentare k ON n.id k.id_news
                      WHERE
                          
          (n.autor m.id)
                      
          GROUP BY n.id
                      ORDER BY
                           n
          .datum DESC
                      LIMIT 10 
          Das "n.id = k.id_news" (so richtig) vertauscht, dann gings !

          DANKE php-resource rulez !

          UPDATE
          Und neues Problem, natürlich sind bei den News auch links dabei die entsprechend unter "tmb_news_links" in "id_news", "linkname" und "link" abgespeichert sind.

          Ist es jetzt noch möglich die 3 links an die Tabelle anzuhängen ?
          Oder wenn nicht wie macht es sinn mehrere links abzuspeichern und gleichzeitig mit den news ab zu rufen ?

          Ich denke mein hauptproblem ist das ich ja nur ein Feld pro News zur verfügung habe um einen link anzuhängen !
          Zuletzt geändert von Doomer; 08.10.2003, 18:43.
          [color=blue]THE MAD BOYS[/color]

          Wer anderen eine Bratwurst brät hat ein Bratwurstbratgerät.

          Kommentar


          • #6
            Pack nicht zuviele Joins auf einmal in die Query.

            Wenn du Probleme mit der Performance bekommst, schnapp dir lieber die IDs, die die erste Query zurückliefert
            und schick eine (oder mehrere) weitere Query ab, die die Zusatzdaten für diese IDs liefert.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              ich würd ja gerne mehrere abfragen machen komm dann aber in konflikt mit "smarty" (template system).

              Weil ich in der Template in eine Foreach schleife schmeisse und eine 2. foreach schleife geht da glaub ich nich. Da wird dann alles durcheinander gewürfelt !

              Also entweder alles in eine Abfrage oder pro News ein array anfügen, da bräuchte ich dann aber bitte nen denkanstoss.

              PHP-Code:
                $query  = @mysql_query($sql) OR print (mysql_error());
                
              $news = array(); // leeres Arrayelement erzeugen

                
              while ($row mysql_fetch_assoc($query))
                { 
              $news[] = $row; }
                
              $smarty->assign('newsarray'$news); 
              Also ich müsste ja bevor die daten von der Datenbank kommen mithilfe einer erneuten datenbankabfrage die links raussuchen und diese an das array anfügen, keine ahnung wie ich das anstellen soll, da fehlt mir einfach zu viel mysql/php-wissen !

              oder vorschlag 2:
              die links nich in einer extra Tabelle abspeichern, sondern bei den news (spalte "links") und zwar in dem muster
              http://www.php-resource.de@@@http://....net@@@...usw.

              + spalte linname
              PHP-Resource@@@TMB-CLAN@@@... usw.

              aber das müsste auch vor der übergabe an das Templatesystem gesplittet und bearbeitet werden...

              hmpf, an sich hat das programmieren bis hier her spass gemacht, jetzt artet das ganze in Arbeit aus.


              naja gehn mers trotzdem weiter an...
              [color=blue]THE MAD BOYS[/color]

              Wer anderen eine Bratwurst brät hat ein Bratwurstbratgerät.

              Kommentar

              Lädt...
              X