array und sql
Raphaël
- php
0 stefan0 Raphal
0 Philipp Hasenfratz0 Vimes
Servus,
ich habe viele probleme (mit meiner seite) aber möchte nur eins darlegen:
ich versuche eine datenbank abfrage zu optimieren...
eine ziemlich große tabelle enthält:
benutzer#, stundenanzahl und datum (und mehr aber egal)
bis jetzt werden die daten in mehreren schleifen ausgelesen.
macht die sache sehr langsam.
ich würde gerne die daten in ein array schreiben.
benutzer# monat jahr stunden
1 1 2003 13,5
1 2 2003 26,75
31 1 2003 150
31 3 2003 ...
und so weiter... denke das könnte die sache schneller machen aber ich bin irgendwie nicht in der lage, mein array zu füllen.
vielleicht kann mir ja jemand helfen und mir sagen, wie ich das machen kann...
Rapha
$aResult = mysql_query("SELECT benutzer, stundenanzahl, datum FROM TABELLE WHERE id=$id ORDER BY benutzer") or die (mysql_error());#
while($record = mysql_fetch_array($aResult);
{
echo $record[benutzer];
echo $record[stundenanzahl]; etc...
}
$record ist ein array, der alle ausgewählten Felder aus MySQL enthält
und aResult enthält alle Datensätze
mfg stefan
$aResult = mysql_query("SELECT benutzer, stundenanzahl, datum FROM TABELLE ORDER BY b_nr");
while($record = mysql_fetch_array($aResult);
{
echo $record[benutzer];
echo $record[stundenanzahl]; etc...
}
ok das problem ist, das ich die summe der stunden brauche...
stunden (00:00:00)
nehme ich mit ereg aus einander stunden=x[1]*60+x[2].
dann habe ich die minuten aber wie ordne ich jetzt die daten der zeile im array zu?
array[b_nr][monat][jahr][summe]=array[b_nr][monat][jahr][summe]+stunden?
Halihallo Raphaël
ich versuche eine datenbank abfrage zu optimieren...
http://www.mysql.com/doc/en/MySQL_Optimisation.html
eine ziemlich große tabelle enthält:
Was heisst ziemlich gross?
bis jetzt werden die daten in mehreren schleifen ausgelesen.
Warum?
macht die sache sehr langsam.
Kann ich mir vorstellen ;)
ich würde gerne die daten in ein array schreiben.
http://www.php.net/manual/de/function.mysql-fetch-array.php
benutzer# monat jahr stunden
SELECT benutzer, MONTH(datum), YEAR(jahr), stunden FROM deine_tabelle;
und so weiter... denke das könnte die sache schneller machen aber ich bin irgendwie nicht in der lage, mein array zu füllen.
Warum? - Wo ist das Problem?
Viele Grüsse
Philipp
das problem ist, das ich die daten noch zusammenrechnen muß...
und ich weiß nicht wie ich die stunden der passenden reihe in dem array zuordnen kann...
Halihallo Raphaël
das problem ist, das ich die daten noch zusammenrechnen muß...
und ich weiß nicht wie ich die stunden der passenden reihe in dem array zuordnen kann...
Welcher Datentyp hat die Spalte "stunden"?
Du brauchst wohl ein neues Array, mit dem Benutzer als Key und der Anzahl Stunden/Min/S
als Value. Dann iterierst (durchläufst) du das Datenarray und addierst den jeweiligen
Wert im neuen Array $benutzer.
Sinngemäss:
$benutzer[$daten[benutzer]] += $daten[stunden];
obwohl du von $daten[stunden] eben die relevante Information (Minuten/Stunden)
extrahieren musst.
Viele Grüsse
Philipp
dbopen();
$i=0;
$res=mysql_query("select * from aufgabenstunden-projekte-bearbeiter
");
while($row=mysql_fetch_array($res)){
ereg ("([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $row["stunden"], $regs);
$temp=$regs[1]*60+$regs[2];
$temp2=getdate($row["s_datum"]);
$monat=$temp2[mon];
$jahr=$temp2[year];
$tabelle[$row["b_nr"]][$monat][$jahr]=$tabelle[$row["b_nr"]][$monat][$jahr]+$temp;
}
mysql_close();
zu meiner entschuldigung muß ich sagen, das es mein erstes array ist...
Halihallo Raphaël
zu meiner entschuldigung muß ich sagen, das es mein erstes array ist...
Ja, sieht gut aus, bis auf das Faktum, dass du dennoch Jahr und Monat in $tabelle stehen
hast. Ist dies beabsichtigt? - Oder möchtest du nicht die gesamte Anzahl Stunden eines
jeden Benutzers?
Ist das die Lösung deines Problems?
Viele Grüsse
Philipp
nene ich brauche die summen, jedes benutzers pro monat...
aber wie gebe ich das ganze jetzt wieder aus?
ich bekomme immer ... garnix oder "Array" wenn ich das ausgeben will...
moin,
warum läßt Du sql nicht schon die gesuchten Summen bestimmen?
SELECT MIN(benutzer#), SUM(stundenanzahl) FROM Tabelle GROUP BY benutzer#, monat ORDER BY ..