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

  • Gast-Avatar
    Ein Gast erstellte das Thema Ergebniss eines Zeitraumes + Ergebniss keines Zeitraumes.

    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

  • DiBo33
    antwortet
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • DiBo33
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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";

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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'];

    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    mach es doch einfach in 2 getrennten abfragen und füg die daten dann mit php zusammen

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    so sollte es gehen:

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

    Einen Kommentar schreiben:

Lädt...
X