"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Daten (Zahlen) einer MySQL Spalte zusammenrechnen [pHp]

Phobos 18.02.2003 - 22:40 670 13
Posts

Phobos

✝
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
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 :D)

Code: PHP
<?

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 :cool:
pHs
Bearbeitet von Phobos am 18.02.2003, 22:45

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
SELECT SUM(groesse) AS gesamtgroesse FROM tabelle

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat von watchout
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

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
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

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
sry eine frage

was is preg_replace("/[^0-9]./","",$result[6]);

meinst du ereg_replace?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Phobos
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 :rolleyes:
Bearbeitet von watchout am 19.02.2003, 16:52

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
ich hab a einfachere lösung gfunden.
vor der schleife
$summe = 0;

in der schleife

Code: PHP
$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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
im grunde genommen ereg_replace.

wo leigt genau der unterschied?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
syntax und geschwindigkeit

bin mir nicht sicher aber ereg-funktionen sind glaub ich nicht "greedy"

Phobos

&#10013;
Avatar
Registered: Jan 2003
Location: 1050
Posts: 2111
wieso nimmt ma dann nicht einfach die langsamen funktionen raus und ersetzt sie durch die schnelleren :D

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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;
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz