Mailinglisten-Archive |
Hallo Leute,
ich hoffe mal das hier ist nicht OT :
Ich hab ICRADIUS am laufen, der loggt den ganzen Einwahl-Traffic etc. in eine MySQL-Datenbank.
Im Moment hat diese Tabelle ca. 245877 Eintraege.
Folgenden PHP-Code benutze ich, um die Gesamtonlinezeit aller Kunden auszulesen :
$mon[1] = '-01-01';
$mon[2] = '-02-01';
$mon[3] = '-03-01';
$mon[4] = '-04-01';
$mon[5] = '-05-01';
$mon[6] = '-06-01';
$mon[7] = '-07-01';
$mon[8] = '-08-01';
$mon[9] = '-09-01';
$mon[10] = '-10-01';
$mon[11] = '-11-01';
$mon[12] = '-12-01';
$mon_e[1] = '-01-31'; # Jeder Monat hat 31 Tage ;)
$mon_e[2] = '-02-31';
$mon_e[3] = '-03-31';
$mon_e[4] = '-04-31';
$mon_e[5] = '-05-31';
$mon_e[6] = '-06-31';
$mon_e[7] = '-07-31';
$mon_e[8] = '-08-31';
$mon_e[9] = '-09-31';
$mon_e[10] = '-10-31';
$mon_e[11] = '-11-31';
$mon_e[12] = '-12-31';
mysql_connect($host,$user,$pass);
$sql = "select UserName,AcctSessionTime from radacct where (AcctStartTime >= '$jahr$mon[$monat] 00:00:00' AND AcctStopTime <= '$jahr$mon_e[$monat] 23:59:59') order by UserName";
$result = mysql($db,$sql);
mysql_close();
$anzahl = mysql_num_rows($result); echo $anzahl." ";
for ($i = 0; $i < $anzahl; $i++)
{
$user = mysql_result($result,$i,'UserName');
$time = mysql_result($result,$i,'AcctSessionTime');
$total[$user]=$total[$user]+$time;
}
while (list($index,$value) = each($total)) {
echo "User $index war $value Sekunden online<br>\n";
}
Sooo, der Query $sql dauert ca. 6 Sekunden zum ausfuehren(ich setze $monat auf 2 = Fabruar" , Gesamt-results :35199).
Der Rest allerdings dauert Ewgigkeiten (also das mysql_result() ). Gibts da vielleicht eine schon von
MySQL her bessere Loesung das alles abzuhandeln ?? Kann mir MySQL das vielleicht schon zusammenrechnen??
Danke,
Thomas
---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive