Ankündigung

Einklappen
Keine Ankündigung bisher.

Ergebniss eines Zeitraumes + Ergebniss keines Zeitraumes

Einklappen

Neue Werbung 2019

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

  • Ergebniss eines Zeitraumes + Ergebniss keines Zeitraumes

    Hallo!

    Ich habe eine Tabelle mit Blog-Einträgen verschiedener Personen. Jetzt möchte ich eine Liste aller Personen, mit der Anzahl ihrer Einträge der letzten 20 Tage.
    Ich bekomme eine Abfrage hin, die mir die Anzahl der Einträge pro Person, der letzten 20 Tage ausgiebt. Hat eine Person aber keinen Eintrag in den letzten 20 Tagen gemacht, kommt er nicht im Ergebnis vor, klar. Ich möchte aber, dass dann trotzdem die Info da ist, dass er keine Einträge gemacht hat.

    Die Liste:
    Name | Datum

    Martin | "vor 5 Tagen"
    Martin | "vor 6 Tagen"
    Peter | "vor 11 Tagen"
    Susi | "vor 21 Tagen"


    Ich bekomme soweit:
    Name | Anzahl

    Martin | 2
    Peter | 1


    Möchte aber bekommen:
    Name | Anzahl

    Martin | 2
    Peter | 1
    Susi | 0


    Vielen Dank für die Hilfe im Voraus!!
    Gruß,
    Micha

  • #2
    so sollte es gehen:

    PHP-Code:
    SELECT NameCount( * ) AS Anzahl
    FROM tabelle
    WHERE Datum 
    ...
    GROUP BY Name 

    Kommentar


    • #3
      Nein, leider nicht. Das Ergebnis deines SELECTs gibt mir nur eine Liste derjenigen, die innerhalb des Zeitraumes überhaupt einen Eintrag gemacht haben. Ich will aber eine Liste aller Personen, die je einen Eintrag gemacht haben, mit der Anzahl ihrer Einträge der letzten 20 Tage. Wenn sie keinen Eintrag in den letzten 20 Tagen gemacht haben, sollen sie angezeigt werden, mit eben dieser Info.

      Martin | 2
      Peter | 1
      Susi | 0 <-!!!

      Danke aber schonmal für die Antwort.
      Anyone else?

      Kommentar


      • #4
        mach es doch einfach in 2 getrennten abfragen und füg die daten dann mit php zusammen

        Kommentar


        • #5
          Was verstehst du unter "zusammenfügen"? Erst die ganzen Namen in Reihenfolge und danach ihre jeweilige Anzahl an Einträgen der letzten 20 Tage? Dann müsste ich doch pro Name eine eigene Abfrage machen, oder? Das wollte ich umgehen, um möglichst viele Datenbankzugriffe zu vermeiden. Aber wenn es nicht anders geht...

          Kommentar


          • #6
            ich hab an sowas gedacht:

            PHP-Code:
            <?php

            $sql 
            "SELECT Name, Count( * ) AS Anzahl FROM tabelle [b]WHERE Datum[/b] ... GROUP BY Name";
            $result mysql_query($sql);
            while ( 
            $row mysql_fetch_array($result) )
                echo 
            $row['Name'] ." -> "$row['Anzahl'];

            $sql "SELECT Name, Count( * ) AS Anzahl FROM tabelle [b]WHERE NOT Datum[/b] ... GROUP BY Name";
            $result mysql_query($sql);
            while ( 
            $row mysql_fetch_array($result) )
                echo 
            $row['Name'] ." -> "$row['Anzahl'];

            ?>

            Kommentar


            • #7
              Code:
              SELECT Name, SUM(IF(datum>=DATE_ADD(CURDATE(), INTERVAL - 20 DAY), 1, 0)) Anzahl 
              FROM Tabelle 
              GROUP BY Name

              Kommentar


              • #8
                Vielen Dank, DiBo33m! Hast den Nagel auf den Kopf getroffen. IF() kannte ich so noch nicht, perfekt!

                Falls es jemanden interessiert, so sieht mein SELECT jetzt aus und funktioniert (wer in den letzten Tagen am meisten und wieviele Buchstaben in sein Blog getippt hat):

                Code:
                $query = "SELECT name, IF(now()<date_add(datum,interval 20 day), SUM(LENGTH(inhalt)), 0) AS summe FROM blog GROUP BY name ORDER BY summe DESC";

                Kommentar


                • #9
                  Nicht ganz, wenn Martin jetzt noch ein Eintrag älter als 20 Tage hat, wird dieser bei der Summe mitgezählt(du erhälst also die Gesamtsumme aller Einträge)

                  Die SUM() Funktion musst du ausserhalb der IF() Funktion setzen.

                  Code:
                  $query = "SELECT name, SUM(IF(now()<date_add(datum,interval 20 day), LENGTH(inhalt), 0)) AS summe FROM blog GROUP BY name ORDER BY summe DESC";
                  Damit erhälst du die Gesamtsumme der letzten 20 Tage.

                  Kommentar


                  • #10
                    Oh, danke! Magst du auch kurz noch einen Blick auf diese beiden anderen IF's werfen, muss ich da auch noch mal was dran ändern?

                    Anzahl der Wörter der Einträge der letzten 20 Tage:

                    Code:
                    IF(now()<date_add(datum,interval 20 day), SUM(LENGTH(blog.inhalt))-SUM(LENGTH(REPLACE(blog.inhalt,' ',''))), 0) AS summe
                    Anzahl der Einträge der letzten 20 Tage:

                    Code:
                    IF(now()<date_add(datum,interval 20 day), COUNT(blog.inhalt), 0) AS summe

                    Kommentar


                    • #11
                      Code:
                      SUM(IF(now()<date_add(datum,interval 20 day), LENGTH(blog.inhalt)-LENGTH(REPLACE(blog.inhalt,' ','')), 0)) AS summe
                      Code:
                      SUM(IF(now()<date_add(datum,interval 20 day), 1, 0)) AS summe

                      Kommentar

                      Lädt...
                      X