PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden (http://www.selfphp.de/forum/showthread.php?t=19071)

kai4711 06.04.2008 20:33:43

kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Hallo zusammen

ich habe eine Tabelle, in der stehen Anrufdaten eines Telefonservers drinnen (Asterisk):

ua Anruf-Beginn und Länge.

Ziel ist es, die maximale Anzahl der gleichzeitigen Anrufer herauszufinden. (also über alle Einträge)

Meine Idee: Man kann mit anruf-begin+länge das ende bekommen, hätte also Beginn und Ende jedes Anrufes und könnte jetzt schauen wieviele anrufe zu einem bestimmten Zeitpunkt gleichzeitig waren, und davon irgendwie das >Maximum bekommen.

Jetzt stellt sich für mich nur die Problematische Frage: Wie bekomme ich das Maximum über alle Einträge, also die jemals gleichzeitig aktiven Anrufe.

Ich hoffe ich habe das Problem deutlich geschilder und ihr könnt mir helfen!

VIele Grüße und Dank,
Kai

Franzx 06.04.2008 21:36:46

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Hallo kai4711 und herzlich Willkommen im Forum.

Mit Deiner Erklärung alleine können wir hier nur einen smaltalk abhalten.
Um die Sache anzugehen, ist es schon erforderlich etwas von Deinem Tabellenaufbau zu wissen und evtl. Deine Ansätze der DB-Abfrage als Query zu sehen.

Grüße, franzx

kai4711 07.04.2008 06:33:21

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinde
 
src | calldate | duration

wobei calldate datetime ist und duration second

ich habe jetzt mal testweise das hier gemacht um testweise den Endtimestamd zu erzeugen und die Abfrage nur in einem Intervall stattfinden zu lassen.
PHP-Code:

SELECT src AS nummer,calldate AS beginn,DATE_ADD(calldate,INTERVAL billsec second) AS ende  FROM telefon_log WHERE calldate '2008-04-1 00:00:00' AND DATE_ADD(calldate,INTERVAL billsec second) < '2008-04-01 23:59:59'

Ich möchte aus diesen Daten jetzt die maximalen gleichzeitig stattfindenden Zeilen herausbekommen.

Eine Möglichkeit wäre, eine Schleife drumherum zu setzten und bspw. alle vollen Minuten im Intervall zu checken und zu schauen, wieviele dort parallel waren und davon dann das Maximum zu nehmen. Das wäre aber nicht besonders genau (weil wir ja sekundenbasiert sind) und so wie ich mysql kenne geht das auch eleganter. Ich weiss nur leider noch nicht wie!

Viele Grüße
Kai

Franzx 07.04.2008 08:18:41

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Moin, moin,

für die Zeitberechnung würde ich die Zeit erstmal ins unixformat bringen!

PHP-Code:

UNIX_TIMESTAMP(calldate) AS ende ... 

in diesem Format kann auch gerechnet werden.

Vielleicht war dies ja schon der nötige Hinweis, muss aber eben auf ne Besprechung, bin ab frühen Nachmittag wieder da.

Grüße, Franzx

kai4711 07.04.2008 12:32:51

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Hey Franzx,

danke für deinen Hinweis, das bringt mich aber nicht entscheidend weiter.
Ich denke es muss irgendwas mit Subquerys und max() werden, aber ich habe keine Idee wie ich das angehen will.
Momentan habe ich ja nur die Zeilen mit Anfang/Ende und sonst nichts.
Was ja gesucht ist ist das Maximum aller "gleichzeitigen Zeilen"...

Grüße
Kai

Franzx 07.04.2008 13:25:09

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Ja, ja, ich hatte Dich schon richtig verstanden. Habe dies bslang auch noch nicht gemacht. Will mal versuchen diese gesamte Anforderung aufzudröseln!

1. Rechne ich alle Werte in UNIXZEIT um, also in Sekunden, für von und für bis, erhalte ich eine Zeitspanne.
2. Vergleiche ich diese Zeitspanne mit den Zeitspannen von den anderen Datensätzen, mit
PHP-Code:

>= von and <= bis 

Mal abgesehen von der UNIX-Time, wird in Deinem zweiten Post ja bereits im Quere so dargestellt.

3. Zähle die zutreffenden Datensätze, die beim jeweiligen Vergleich rauskommen und die größte Zahl ist das gewünschte Ergebnis.
PHP-Code:

$mostgleich 0;
$result mysql_query(Select ....
$zaehler 0;
while(
$row mysql_fetch_array($result))
{
$zaehler++;
if (
$mostgleich $zaehler)
{
$mostgleich $zaehler;
}
}
...

übersehe ich etwas?
GrüßeFranzx 


kai4711 07.04.2008 13:29:23

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Genau, so hätte ich das auch gemacht (zB in PHP) aber: ich möchte möglichst viel auf MySQL-Seite machen.

In PHP müsste ich ja im extremfall für jede zu checkende Sekunde (oder man könnte auch nur jede Minute überprüfen) die gleichzeitige Anzahl auslesen und dann den grösten nehmen.

Wenn ich jetzt den SPaß auf einen Zeitraum von zb 3 Monaten anwende komme ich mal ganz schnell auf einige Zehntausend sql-Abfragen dafür.

Gibt es keine Möglichkeit da mehr mit sql zu machen?

Grüße
Kai

Franzx 07.04.2008 13:39:31

AW: kompliziertes SQL-Query: aus Begin/Ende maximale gleichzeitige Events herausfinden
 
Zitat:

Zitat von kai4711 (Beitrag 114651)
Genau, so hätte ich das auch gemacht (zB in PHP) aber: ich möchte möglichst viel auf MySQL-Seite machen.

In PHP müsste ich ja im extremfall für jede zu checkende Sekunde (oder man könnte auch nur jede Minute überprüfen) die gleichzeitige Anzahl auslesen und dann den grösten nehmen.

Wenn ich jetzt den SPaß auf einen Zeitraum von zb 3 Monaten anwende komme ich mal ganz schnell auf einige Zehntausend sql-Abfragen dafür.

Gibt es keine Möglichkeit da mehr mit sql zu machen?

Grüße
Kai

Hallo Kai,

da hast Du sicherlich recht und die Datenbank hätte mehr als gut zu tun.
Um die Anforderung in MySql zu erledigen, wollen wir mal hoffen, dass hier noch ein fortgeschrittener MySQL-User rein schaut und einen Tipp hat. Ich habe da keine weitere Anregung mehr zu!

Grüße und viel Erfolg,

Franz


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:07:30 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.