2016-06-10 8 views
0

Ich entwickle ein System, das die Gesamtzahl der an einem Tag gesendeten SMS ausgeben soll. Es sollte auch die gelieferten und diejenigen, die fehlgeschlagen sind, trennen. Es sollte nur die Aufzeichnungen für diesen Tag nur ausstellen ... wie nur die Aufzeichnungen für diesen Tag. Meine Datenbank ist smsdb.PHP Mysql select-Anweisung zur Anzeige dieser Tag Datensätze NUR

$sql = "CREATE TABLE smsdb (
    id INT(6) AUTO_INCREMENT PRIMARY KEY, 
    sms_text VARCHAR(300) NOT NULL, 
    receiver_number VARCHAR(30) NOT NULL, 
    time_sent DATETIME, 
    status VARCHAR(20))"; 


//I tried to use the command to display todays records but I get all records even for other days. 

$sql = ("SELECT DATE(time_sent) AS date, COUNT(*) as total_sent, SUM(status = 'Success') as delivered,SUM(status = 'failed') AS failed FROM smsdb GROUP BY DATE(time_sent) "); 

Ich möchte nur Gesamtdatensätze nur für diesen Tag. Bitte, jemand hilft mir

+0

Ihre Anfrage Referenzen eine Statusspalte, die in der Tabelle nicht existiert. Könnten Sie Ihre Frage bitte mit der richtigen Tabellendefinition aktualisieren? – chocochaos

+0

Es gibt keine wo Bedingung –

+0

Welche Art von Feld time_sent ist? –

Antwort

1

für das aktuelle Datum in den wo Kriterien filtern Nur:

SELECT 
    DATE(time_sent) AS date, 
    COUNT(*) as total_sent, 
    SUM(case when status = 'Success' then 1 else 0 end) as delivered, 
    SUM(case when status = 'failed' then 1 else 0 end) AS failed 
FROM smsdb 
WHERE date(time_sent)=curdate() 
GROUP BY DATE(time_sent) 
1

Sie sind nicht in einen Datumsfilter setzen. Sie können entweder in eine Variable übergeben, so können Sie an anderen Tagen wählen:

$sql = ("SELECT DATE(time_sent) AS date, COUNT(*) as total_sent, SUM(status = 'Success') as delivered,SUM(status = 'failed') AS failed FROM smsdb WHERE DATE(time_sent) = '$date_selected'"); 

Beachten Sie, dass Sie sollten wirklich Parameter für diese binden, aber das wird Ihnen eine Idee geben.

Die andere Option, wenn Sie wollen, dass es immer der aktuelle Tag ist die CURDATE() Funktion verwenden:

$sql = ("SELECT DATE(time_sent) AS date, COUNT(*) as total_sent, SUM(status = 'Success') as delivered,SUM(status = 'failed') AS failed FROM smsdb WHERE DATE(time_sent) = CURDATE()"); 
Verwandte Themen