MySQL Abfrage

Flooow

Mitglied
Guten Tag,

das ist der Aufbau meiner Tabelle.

caller_id_name varchar(30) DEFAULT NULL,
caller_id_number varchar(30) DEFAULT NULL,
destination_number varchar(30) DEFAULT NULL,
context varchar(20) DEFAULT NULL,
start_stamp datetime DEFAULT NULL,
answer_stamp datetime DEFAULT NULL,
end_stamp datetime DEFAULT NULL,
duration int(11) DEFAULT NULL,
billsec int(11) DEFAULT NULL,
hangup_cause varchar(50) DEFAULT NULL,
uuid varchar(100) DEFAULT NULL,
bleg_uuid varchar(100) DEFAULT NULL,
accountcode varchar(10) DEFAULT NULL,
domain_name varchar(100) DEFAULT NULL

Ich habe nun diese Sql Abfrage :

Code:
$abfrage = "SELECT COUNT(caller_id_name) AS  inbound
 FROM cdr 
WHERE caller_id_name
LIKE 'Stoerung%' 
and duration>35 
and start_stamp
 BETWEEN '$startdatum%' and '$enddatum%' ";

funktioniert wunderbar.

Es gibt aber nun mehrere Datensätze welche die selbe Uhrzeit haben (start_stamp datetime DEFAULT NULL, das ist der Tabelleneintrag mit dem Datum+Uhrzeit). Wie realisiere ich nun, das Einträge, welche die selbe Datetime haben, nur einmal gezählt werden? Verwende ich hierfür `distinct'? Hab leider grad kein funktionierendes system
 
Jepp, Distinct währe nicht falsch

SQL:
SELECT
    COUNT(DISTINCT start_stamp) AS  inbound
FROM
    ...

PS: Warum hast du beim BETWEEN bei den Werten noch ein % am Ende?
 
Zuletzt bearbeitet von einem Moderator:
Ich habe ein HTML Textfeld wo der Anwender ein Anfangs+Enddatum eintragen kann. Also beispielsweise 2013-03-05 als anfangsdatum und 2013-03-08 als Enddatum, also habe ich mir gedacht das es sinnvoll wäre % einzusetzen, damit alle daten, egal welche Uhrzeit nach dem Datum kommt, ausgegeben werden. Denke ich falsch?
 
Du vergleichst so das ganze als String und die Datumsfunktionalität geht damit flöten
Verwende DATE() um das Datum zu extrahieren.

Ich würde auch die Eingabe so gestalten, dass der User sein Datum als deutsches Format eingeben kann. Also das Format gemäss Zusatz von 2001 zur DIN5008 (wikipedia):
dd.mm.yyyy

Am Ende solltest du Datum mit Datum vergleichen und nicht String mit String

SQL:
WHERE
    DATE(start_stamp) BETWEEN STR_TO_DATE('{$startdatum}', '%d.%m.%Y') AND STR_TO_DATE('{$enddatum}', '%d.%m.%Y')
 
Zuletzt bearbeitet von einem Moderator:
Zurück