php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.09.2005, 11:01  
Gast
 
Beiträge: n/a
Standard [Erledigt] 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
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.09.2005, 11:21  
Gast
 
Beiträge: n/a
Standard

so sollte es gehen:

PHP-Code:
SELECT NameCount( * ) AS Anzahl
FROM tabelle
WHERE Datum 
...
GROUP BY Name 
  Mit Zitat antworten
Alt 30.09.2005, 11:29  
Gast
 
Beiträge: n/a
Standard

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?
  Mit Zitat antworten
Alt 30.09.2005, 11:56  
Gast
 
Beiträge: n/a
Standard

mach es doch einfach in 2 getrennten abfragen und füg die daten dann mit php zusammen
  Mit Zitat antworten
Alt 30.09.2005, 12:01  
Gast
 
Beiträge: n/a
Standard

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...
  Mit Zitat antworten
Alt 30.09.2005, 12:11  
Gast
 
Beiträge: n/a
Standard

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'];

?>
  Mit Zitat antworten
Alt 30.09.2005, 14:22  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Code:
SELECT Name, SUM(IF(datum>=DATE_ADD(CURDATE(), INTERVAL - 20 DAY), 1, 0)) Anzahl 
FROM Tabelle 
GROUP BY Name
DiBo33 ist offline   Mit Zitat antworten
Alt 30.09.2005, 17:53  
Gast
 
Beiträge: n/a
Standard

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";
  Mit Zitat antworten
Alt 30.09.2005, 18:16  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

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.
DiBo33 ist offline   Mit Zitat antworten
Alt 30.09.2005, 18:26  
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.