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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Ergebniss eines Zeitraumes + Ergebniss keines Zeitraumes
Einklappen
Neue Werbung 2019
Einklappen
X
-
Ergebniss eines Zeitraumes + Ergebniss keines Zeitraumes
Stichworte: -
-
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
-
Ein Gast antworteteOh, 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
Code:IF(now()<date_add(datum,interval 20 day), COUNT(blog.inhalt), 0) AS summe
Einen Kommentar schreiben:
-
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";
Einen Kommentar schreiben:
-
Ein Gast antworteteVielen 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:
-
Code:SELECT Name, SUM(IF(datum>=DATE_ADD(CURDATE(), INTERVAL - 20 DAY), 1, 0)) Anzahl FROM Tabelle GROUP BY Name
Einen Kommentar schreiben:
-
Ein Gast antworteteich 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:
-
Ein Gast antworteteWas 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:
-
Ein Gast antwortetemach es doch einfach in 2 getrennten abfragen und füg die daten dann mit php zusammen
Einen Kommentar schreiben:
-
Ein Gast antworteteNein, 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:
-
Ein Gast antworteteso sollte es gehen:
PHP-Code:SELECT Name, Count( * ) AS Anzahl
FROM tabelle
WHERE Datum ...
GROUP BY Name
Einen Kommentar schreiben:
Einen Kommentar schreiben: