Daten (Zahlen) einer MySQL Spalte zusammenrechnen [pHp]
Phobos 18.02.2003 - 22:40 670 13
Phobos
✝
|
Also ich habe einem Freund versprochen ich mach ihm eine liste meiner Filme und da mir eh grad fad war dacht ich mir ich mach es mittels php und mysql, damit auch ich immer am laufenden bin was eigentlich auf meiner festplatte so rumkullert folgendes ist mir noch in den sinn geschossen: eine spalte in der tabelle ist der größe der filme gewidmedt worden. Nun würde ich alle werte in dieser spalte (also mehrer datensätze) zusammenzählen und unten als summe ausgeben. Die daten werden in einer while schleife und mit fetch_array ausgegeben. wenn ihr unbedingt den code sehen wollt (damit sich nicht wieder einige aufregen wegen unzureichender informationsgebung ) <?
include "connect.php";
$query = "select * from filme order by film";
$anfrage = mysql_query($query);
$x=0;
while($result = mysql_fetch_array($anfrage)){
if(empty($x)){ $x++; ?>
<tr height=17>
<?}
else{ $x--; ?>
<tr height=17 bgcolor="#EAEAEA">
<? }
$array = explode(" ",$result[5]);
if(empty($array[0])){
$result[5] = "k.A.";
}
?>
<td><div class="text1"><a href="edit_filme.php?id=<? echo $result[0] ?>"><? echo $result[1] ?></a></div></td>
<td align="center"><span class="text"><? echo $result[2] ?></span>
<td align="center"><span class="text"><? echo $result[3] ?></span></td>
<td align="center"><span class="text"><? echo $result[4] ?></span></td>
<td align="center"><span class="text"><? echo $result[5] ?></span></td>
<td align="right"><div class="text2"><? echo $result[6] ?></div></td>
</tr>
<?
}
?>
wobei ich dazusagen muss das des $result[6] (also die datengröße) aus 2 teilen besteht, aus dem wert (also zb 650) und Mb. Man müsste halt in der schleife die array nochmal mit explode zerteilen. thx 4 hlp pHs
Bearbeitet von Phobos am 18.02.2003, 22:45
|
watchout
Legendundead
|
SELECT SUM(groesse) AS gesamtgroesse FROM tabelle
|
atrox
in fairy dust... I trust!
|
vorm anfang der schleife: $mbsumme=0;
in der schleife: $mbsumme+=preg_replace("/[^0-9]./","",$result[6]);
//update: nach dem ich es nochmal angesehen habe, heißt es natürlich: $mbsumme+=preg_replace("/[^0-9]/","",$result[6]);
Bearbeitet von atrox am 20.02.2003, 13:47
|
atrox
in fairy dust... I trust!
|
SELECT SUM(groesse) AS gesamtgroesse FROM tabelle das hab ich mir auch überlegt, groesse ist aber offenbar (wie ungeschickt) ein string wie zb "650mb"... oder hab ich das falsch mitbekommen ? db.. man sollte es mit etwas wie... select sum(convert(replace(groesse,"mb",""),INTEGER)) from tabelle ... versuchen. PS: @Phobos: du solltest lieber deine felder über den feldnamen ansprechen (also $result[grosse] statt $result[6], weil du so unabhängig(er) von änderungen an der tabelle wirst.
Bearbeitet von atrox am 18.02.2003, 23:32 (added PS to phobos)
|
Phobos
✝
|
nicht gewusst das des geht, des wird aber nur mit fetch_row gehen, oder funktioniert des ah mit fetch_arrray? stop groesse = "650 Mb" mit abstand also leicht mit $groesse = explode(" ",$result[6]); dann echo $groesse[0] das wäre dann der effektive wert. aus dem grund wollt ichs nicht mit einer sql funktion machen , weil ich so wenig wie möglich auf die db zugreifen will muss des probiren wenn ich daheim bin, thx
|
Phobos
✝
|
sry eine frage
was is preg_replace("/[^0-9]./","",$result[6]);
meinst du ereg_replace?
|
watchout
Legendundead
|
sry eine frage
was is preg_replace("/[^0-9]./","",$result[6]);
meinst du ereg_replace? aufgrund der form dürfte es preg_replace sein edit: (ich sollt lesen üben...) preg_replace: die preg-funktionen sind schneller, besser und überhaupt als die ereg(i): http://www.php.net/manual/de/ref.pcre.php@atrox: hattest recht
Bearbeitet von watchout am 19.02.2003, 16:52
|
atrox
in fairy dust... I trust!
|
normalerweise sollte man soviel wie möglich in der datenbank machen, weil dann die daten nicht (sinnlos) überst netz/Sockets zur applikation übertragen werden müssen. bei oracle geht das sogar soweit, daß man über treewalking rekursionen für baumartige-strukturen auf den server auslagern kann. in diesem fall ist es egal, weil du sowieso alle datensätze brauchst, weil du sie anzeigst.
|
Phobos
✝
|
ich hab a einfachere lösung gfunden. vor der schleife $summe = 0; in der schleife $temp = explode(" ",$result[groesse]);
$summe = $temp + $summe;
und dann hab ich die summe von allen ich würd trotzdem gern wissen was des preg_replace macht. ich kapiers net auf englisch
|
atrox
in fairy dust... I trust!
|
du solltest von den "gemischten" feldern weggehen, und nur reine zahlen- und reine text-felder in der datenbank einführen - du vernichtest sonst eines der vorzüge einer relationalen datenbank. preg_replace führt text-ersetzungen mit "regulären ausdrücken" nach einer perl-ähnlichen syntax durch. ohne jetzt zu sehr in die theoretische informatik oder reguläre sprachen abzurutschen, sei einfach erwähnt, es handelt sich um regeln für text-aufbau und -suche. das obige beispiel (ja da war ein punkt zuviel, habs ausgebessert) ersetzt jede nicht-zahl durch einen leerstring, wodurch nur ziffern übrigbleiben. man kann damit aber noch viel viel mehr machen, und es lohnt sich echt, mal mit regulären ausdrücken zu beschäftigen (schade nur, daß sie nur mäßig standardisiert sind)
|
Phobos
✝
|
im grunde genommen ereg_replace.
wo leigt genau der unterschied?
|
watchout
Legendundead
|
syntax und geschwindigkeit
bin mir nicht sicher aber ereg-funktionen sind glaub ich nicht "greedy"
|
Phobos
✝
|
wieso nimmt ma dann nicht einfach die langsamen funktionen raus und ersetzt sie durch die schnelleren
|
atrox
in fairy dust... I trust!
|
1) leicht andere syntax, unterschiedliche herkunft 2) php hat schon immer versucht "auf allen hochzeiten zu tanzen". zb gibt es strstr() und strpos(), oder die asp-ähnliche syntax für ausgaben <?= $var ?> oder aber kommentare // c++ style /* c/c++ style */ # bash style
oder aber unterschiedliche syntax für code-blöcke in c- und basic-style: if (expr) { ... } ..bzw vbasic-ähnlicher style if (expr): ... endif;
|