Daten (Zahlen) einer MySQL Spalte zusammenrechnen [pHp]

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/daten_zahlen_einer_mysql_spalte_zusammenrechnen_ph_67899/page_1 - zur Vollversion wechseln!


Phobos schrieb am 18.02.2003 um 22:40

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


watchout schrieb am 18.02.2003 um 23:23

SELECT SUM(groesse) AS gesamtgroesse FROM tabelle


atrox schrieb am 18.02.2003 um 23:24

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]);


atrox schrieb am 18.02.2003 um 23:25

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.


Phobos schrieb am 19.02.2003 um 15:31

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 schrieb am 19.02.2003 um 15:37

sry eine frage

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

meinst du ereg_replace?


watchout schrieb am 19.02.2003 um 16:50

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:


atrox schrieb am 19.02.2003 um 17:10

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 schrieb am 20.02.2003 um 09:11

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 schrieb am 20.02.2003 um 13:56

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 schrieb am 20.02.2003 um 18:30

im grunde genommen ereg_replace.

wo leigt genau der unterschied?


watchout schrieb am 20.02.2003 um 18:40

syntax und geschwindigkeit

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


Phobos schrieb am 20.02.2003 um 19:31

wieso nimmt ma dann nicht einfach die langsamen funktionen raus und ersetzt sie durch die schnelleren :D


atrox schrieb am 20.02.2003 um 19:46

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;




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025