Mailinglisten-Archive |
Hallo Liste, wem mein Prob und meine Lösung interessiert: Alexander M. schrieb: > ich habe folgendes in einer tabelle: > > message > 4 > 5 > 4 > 4 > 5 > 4 > 4 > 4 > 5 > 5 > 4 > 4 > 4 > 4 > 4 > > daraus möchte ich folgendes ergebnis haben: > message count > 4 1 > 5 1 > 4 2 > 5 1 > 4 3 > 5 2 > 4 5 > > d.h. ich möchte gruppen bilden und diese zählen (nach jedem change/änderung > des vorherigen satzes). > mit group by message erlange ich nur (ist mir auch klar): > message count > 4 11 > 5 4 > > momentan fällt mir nur eine möglichkeit ein, alle > sätze einzeln durchgehen und mir die gruppen in einem > array zusammen zu fassen. aber die tabelle besitzt > >2.000.000 Datensätze > > tja, wenns per sql nicht möglich ist, wie schaffe > ich es in php am effizientesten? ich habe das problem jetzt wie folgt gelöst: define ("SHM_KILL", 4); //message define ("SHM_DEATH", 5); define ("TEAMCT", "CT"); define ("TEAMT", "TERRORIST"); $MAP = 'de_vertigo'; $MONTH = 10; $YEAR = 2001; $GSID = 100; // tut nichts zur Sache $NICKNAME = 'blabla'; function get_player_mapstreaks($NICKNAME, $GSID, $MAP, $MONTH, $YEAR) { $sql = "SELECT e.message, e.tstamp FROM Events e LEFT JOIN Games g ON ". "g.id = e.gameid AND g.gsid = $GSID AND g.map = '$MAP' AND ". "MONTH(g.start) = $MONTH AND YEAR(g.start) = $YEAR WHERE ". "(e.message = ".SHM_KILL." OR e.message = ".SHM_DEATH.") AND e.user = '$NICKNAME'"; $arr_streak = myANRS_GetSQLResult($sql); unset($sql); $z = 0; $arr = array(); if (is_array($arr_streak)) { foreach($arr_streak as $key => $arr_val) { $playerteam = get_player_team($NICKNAME, $GSID, $arr_val["tstamp"]); $message = $arr_val["message"]; if (($last_playerteam != $playerteam) OR ($last_message != $message)) { $z = 0; } $z++; switch ($playerteam) { case TEAMCT: if ($message == SHM_KILL) { if ($z > $best_kstreakct) { $arr["KILL"][$playerteam] = $z; $best_kstreakct = $z; } } elseif ($message == SHM_DEATH) { if ($z > $best_dstreakct) { $arr["DEATH"][$playerteam] = $z; $best_dstreakct = $z; } } case TEAMT : if ($message == SHM_KILL) { if ($z > $best_kstreakt) { $arr["KILL"][$playerteam] = $z; $best_kstreakt = $z; } } elseif ($message == SHM_DEATH) { if ($z > $best_dstreakt) { $arr["DEATH"][$playerteam] = $z; $best_dstreakt = $z; } } } $last_playerteam = $playerteam; $last_message = $message; } } return $arr; } -- Alexander M.
php::bar PHP Wiki - Listenarchive