Avatar billede TiHs Nybegynder
03. april 2007 - 14:27 Der er 14 kommentarer og
1 løsning

sum fra forskellige felter i samme tabel

Hej eksperter
Jeg har en tabel med en del felter. Hvordan laver jeg en sammentælling af nogle af disse felter, ikke alle, så jeg kan
lave et samlet ialt beløb ?
Ved ikke om der kan gøres noget smart med det,  men jeg kan også
sige at det er hver 2. felt jeg skal sammenlægge i denne tabel.
Avatar billede fennec Nybegynder
03. april 2007 - 14:31 #1
Ikke helt med på hvad du mener, men regner med det er dette du søger:
select tal1+tal3+tal5+tal7 as total from enTabel
Avatar billede TiHs Nybegynder
03. april 2007 - 14:46 #2
Min tabel hedder regnskab

Sådan her ser den ud:
CREATE TABLE `regnskab` (
  `id` tinyint(4) NOT NULL auto_increment,
  `aptxt` text NOT NULL,
  `apoelg` text NOT NULL,
  `apoel` text NOT NULL,
  `folitxt` text NOT NULL,
  `folioelg` text NOT NULL,
  `folioel` text NOT NULL,
  `motriktxt` text NOT NULL,
  `motrikoelg` text NOT NULL,
  `motrikoel` text NOT NULL,
  `jespertxt` text NOT NULL,
  `jesperoelg` text NOT NULL,
  `jesperoel` text NOT NULL,
  `rodetxt` text NOT NULL,
  `rodeoelg` text NOT NULL,
  `rodeoel` text NOT NULL,
  `maaltxt` text NOT NULL,
  `maaloelg` text NOT NULL,
  `maaloel` text NOT NULL,
  `puyoltxt` text NOT NULL,
  `puyoloelg` text NOT NULL,
  `puyoloel` text NOT NULL,
  `lundetxt` text NOT NULL,
  `lundeoelg` text NOT NULL,
  `lundeoel` text NOT NULL,
  `robertxt` text NOT NULL,
  `roberoelg` text NOT NULL,
  `roberoel` text NOT NULL,
  `segatxt` text NOT NULL,
  `segaoelg` text NOT NULL,
  `segaoel` text NOT NULL,
  `timtxt` text NOT NULL,
  `timoelg` text NOT NULL,
  `timoel` text NOT NULL,
  `tuuretxt` text NOT NULL,
  `tuureoelg` text NOT NULL,
  `tuureoel` text NOT NULL,
  `torbtxt` text NOT NULL,
  `torboelg` text NOT NULL,
  `torboel` text NOT NULL,
  `heintxt` text NOT NULL,
  `heinoelg` text NOT NULL,
  `heinoel` text NOT NULL,
  `hansitxt` text NOT NULL,
  `hansioelg` text NOT NULL,
  `hansioel` text NOT NULL,
  `kenttxt` text NOT NULL,
  `kentoelg` text NOT NULL,
  `kentoel` text NOT NULL,
  `svendtxt` text NOT NULL,
  `svendoelg` text NOT NULL,
  `svendoel` text NOT NULL,
  `oelg` text NOT NULL,
  `oel` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=97 ;

tallene der kommer ind i felterne der slutter med oelg skal ligges sammen.
Jeg vil så printe/echo resultatet i min php tabel

som du kan se poster jeg selv lige for tiden det samlede resultat i henholdsvis
oel og oelg sidst i tabellen. Disse to vil jeg gerne have slettet og så lave
en sql forspørgsel istedet til at gøre det automatisk ...
Avatar billede fennec Nybegynder
03. april 2007 - 14:57 #3
Det er jo text felter... Troede det var tal. Nu er jeg slet ikke med længere...

Vil du samle tekststrenge i de enkelte koloner til en lang?
Avatar billede TiHs Nybegynder
04. april 2007 - 08:03 #4
hehe ... nåå ja.
Jamen jeg laver dem bare om til tal felter. Hvad er det så lige de skal være ?
Og jeg vil gerne kunne skrive tale som 1,0 10,5 så de kan lægges sammen
til 11,5 f.eks. ....
Avatar billede fennec Nybegynder
04. april 2007 - 08:34 #5
F.eks DECIMAL(18,2)

18 angiver antal tegn den skal gemme i tallet og 2 angiver antal.

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
Avatar billede TiHs Nybegynder
04. april 2007 - 09:09 #6
Har nu fået det hele rettet til så det istedet hedder:

CREATE TABLE `regnskab` (
  `id` tinyint(4) NOT NULL auto_increment,
  `aptxt` text NOT NULL,
  `apoelg` decimal(2,1) NOT NULL default '0.0',
  `apoel` decimal(2,1) NOT NULL default '0.0',
  `folitxt` text NOT NULL,
  `folioelg` decimal(2,1) NOT NULL default '0.0',
  `folioel` decimal(2,1) NOT NULL default '0.0',
  `motriktxt` text NOT NULL,
  `motrikoelg` decimal(2,1) NOT NULL default '0.0',
  `motrikoel` decimal(2,1) NOT NULL default '0.0',
  `jespertxt` text NOT NULL,
  `jesperoelg` decimal(2,1) NOT NULL default '0.0',
  `jesperoel` decimal(2,1) NOT NULL default '0.0',
  `rodetxt` text NOT NULL,
  `rodeoelg` decimal(2,1) NOT NULL default '0.0',
  `rodeoel` decimal(2,1) NOT NULL default '0.0',
  `maaltxt` text NOT NULL,
  `maaloelg` decimal(2,1) NOT NULL default '0.0',
  `maaloel` decimal(2,1) NOT NULL default '0.0',
  `puyoltxt` text NOT NULL,
  `puyoloelg` decimal(2,1) NOT NULL default '0.0',
  `puyoloel` decimal(2,1) NOT NULL default '0.0',
  `lundetxt` text NOT NULL,
  `lundeoelg` decimal(2,1) NOT NULL default '0.0',
  `lundeoel` decimal(2,1) NOT NULL default '0.0',
  `robertxt` text NOT NULL,
  `roberoelg` decimal(2,1) NOT NULL default '0.0',
  `roberoel` decimal(2,1) NOT NULL default '0.0',
  `segatxt` text NOT NULL,
  `segaoelg` decimal(2,1) NOT NULL default '0.0',
  `segaoel` decimal(2,1) NOT NULL default '0.0',
  `timtxt` text NOT NULL,
  `timoelg` decimal(2,1) NOT NULL default '0.0',
  `timoel` decimal(2,1) NOT NULL default '0.0',
  `tuuretxt` text NOT NULL,
  `tuureoelg` decimal(2,1) NOT NULL default '0.0',
  `tuureoel` decimal(2,1) NOT NULL default '0.0',
  `torbtxt` text NOT NULL,
  `torboelg` decimal(2,1) NOT NULL default '0.0',
  `torboel` decimal(2,1) NOT NULL default '0.0',
  `heintxt` text NOT NULL,
  `heinoelg` decimal(2,1) NOT NULL default '0.0',
  `heinoel` decimal(2,1) NOT NULL default '0.0',
  `hansitxt` text NOT NULL,
  `hansioelg` decimal(2,1) NOT NULL default '0.0',
  `hansioel` decimal(2,1) NOT NULL default '0.0',
  `kenttxt` text NOT NULL,
  `kentoelg` decimal(2,1) NOT NULL default '0.0',
  `kentoel` decimal(2,1) NOT NULL default '0.0',
  `svendtxt` text NOT NULL,
  `svendoelg` decimal(2,1) NOT NULL default '0.0',
  `svendoel` decimal(2,1) NOT NULL default '0.0',
  `oelg` decimal(2,1) NOT NULL default '0.0',
  `oel` decimal(2,1) NOT NULL default '0.0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=97 ;
Avatar billede fennec Nybegynder
04. april 2007 - 09:21 #7
decimal(2,1) er nok for lidt. Det betyder at du kun kan gemme op til tallet 9.9

Første del angiver det totale antal cifre i tallet inklusiv det efter kommaet. Hastigheds/plads mæssig er der intet, der forhindre dig i at sætte den op. De kommer kun til at fylde et par bit ekstra.

Se evt også den sidste kommentar i det link jeg gav dig. Den fortæller netop at med decimal(2,1) vil man ikke kunne gemme tallet 10, selv om det kun kræver to cifre. Kommadelen vil nemlig altid blive medregnet.
Avatar billede TiHs Nybegynder
04. april 2007 - 10:12 #8
Nu har jeg sat den til 15,1 og går så ud fra den kan indeholde op til f.eks. 50,5 eller 99,9 for den sags skyld ??

CREATE TABLE `regnskab` (
  `id` tinyint(4) NOT NULL auto_increment,
  `aptxt` text NOT NULL,
  `apoelg` decimal(15,1) NOT NULL default '0.0',
  `apoel` decimal(15,1) NOT NULL default '0.0',
  `folitxt` text NOT NULL,
  `folioelg` decimal(15,1) NOT NULL default '0.0',
  `folioel` decimal(15,1) NOT NULL default '0.0',
  `motriktxt` text NOT NULL,
  `motrikoelg` decimal(15,1) NOT NULL default '0.0',
  `motrikoel` decimal(15,1) NOT NULL default '0.0',
  `jespertxt` text NOT NULL,
  `jesperoelg` decimal(15,1) NOT NULL default '0.0',
  `jesperoel` decimal(15,1) NOT NULL default '0.0',
  `rodetxt` text NOT NULL,
  `rodeoelg` decimal(15,1) NOT NULL default '0.0',
  `rodeoel` decimal(15,1) NOT NULL default '0.0',
  `maaltxt` text NOT NULL,
  `maaloelg` decimal(15,1) NOT NULL default '0.0',
  `maaloel` decimal(15,1) NOT NULL default '0.0',
  `puyoltxt` text NOT NULL,
  `puyoloelg` decimal(15,1) NOT NULL default '0.0',
  `puyoloel` decimal(15,1) NOT NULL default '0.0',
  `lundetxt` text NOT NULL,
  `lundeoelg` decimal(15,1) NOT NULL default '0.0',
  `lundeoel` decimal(15,1) NOT NULL default '0.0',
  `robertxt` text NOT NULL,
  `roberoelg` decimal(15,1) NOT NULL default '0.0',
  `roberoel` decimal(15,1) NOT NULL default '0.0',
  `segatxt` text NOT NULL,
  `segaoelg` decimal(15,1) NOT NULL default '0.0',
  `segaoel` decimal(15,1) NOT NULL default '0.0',
  `timtxt` text NOT NULL,
  `timoelg` decimal(15,1) NOT NULL default '0.0',
  `timoel` decimal(15,1) NOT NULL default '0.0',
  `tuuretxt` text NOT NULL,
  `tuureoelg` decimal(15,1) NOT NULL default '0.0',
  `tuureoel` decimal(15,1) NOT NULL default '0.0',
  `torbtxt` text NOT NULL,
  `torboelg` decimal(15,1) NOT NULL default '0.0',
  `torboel` decimal(15,1) NOT NULL default '0.0',
  `heintxt` text NOT NULL,
  `heinoelg` decimal(15,1) NOT NULL default '0.0',
  `heinoel` decimal(15,1) NOT NULL default '0.0',
  `hansitxt` text NOT NULL,
  `hansioelg` decimal(15,1) NOT NULL default '0.0',
  `hansioel` decimal(15,1) NOT NULL default '0.0',
  `kenttxt` text NOT NULL,
  `kentoelg` decimal(15,1) NOT NULL default '0.0',
  `kentoel` decimal(15,1) NOT NULL default '0.0',
  `svendtxt` text NOT NULL,
  `svendoelg` decimal(15,1) NOT NULL default '0.0',
  `svendoel` decimal(15,1) NOT NULL default '0.0',
  `oelg` decimal(15,1) NOT NULL default '0.0',
  `oel` decimal(15,1) NOT NULL default '0.0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=97 ;

Hvordan laver jeg så en sql forspørgsel på tabellen og får den til at summere disse
felter sammen så jeg kan poste denne sum med en echo ?

leder og leder på nettet men syntes ikke helt jeg kan finde en nem forklaring på koden ....
Avatar billede fennec Nybegynder
04. april 2007 - 10:23 #9
Med 15,1 kan du have op til tallet 99999999999999,9 (15 stk 9-taller inklusiv det efter kommaet).

Nu er det så bare at sætte den til at lægge dem sammen:
select apoelg+folioelg+motrikoelg+jesperoelg as total from regnskab

Gad ikke skrive alle xxoelg, men det er bare at skrive dem på også.
Avatar billede TiHs Nybegynder
04. april 2007 - 10:55 #10
Lad os sige at jeg først har følgende:

<?php
include("dbconnect.php");
$getregnskab = mysql_query("select * from regnskab ORDER BY id DESC limit 1");
while($r=mysql_fetch_array($getregnskab)){
extract($r);
echo("<table style=\"width: 600px;\">
bla bla bla ... en tabel opsætning.
I en kolonne i min tabel vil jeg så gerne ligge disse sammen. Er det så bare i
denne kolonne jeg skriver:
<td style=\"width: 100px; background-color: #999999; text-align: right;\">
select $apoelg+$folioelg+$motrikoelg+$jesperoelg as total from regnskab</td>

øhh... er ikke helt med :o))
Avatar billede fennec Nybegynder
04. april 2007 - 11:03 #11
både og. Du kan lægge dem sammen i PHP:
<? echo $apoelg+$folioelg+$motrikoelg+$jesperoelg ?>

Men du kan også gøre det i din select, også udskrive total:
$getregnskab = mysql_query("select *, apoelg+folioelg+motrikoelg+jesperoelg as total from regnskab ORDER BY id DESC limit 1");
...
<? echo $total ?>
Avatar billede TiHs Nybegynder
04. april 2007 - 12:09 #12
Det virker helt som det skal med select.

Har dog lige et lille problem. Hvis jeg poster 1,5 eller 2,5 ... så indsætter
den kun 1,0 og 2,0 ... og sum bliver så tre, hvor jeg gerne vil have sum
til at blive 4 ... hvad er det der står forkert så i min tabel ?
Avatar billede fennec Nybegynder
04. april 2007 - 12:28 #13
Mener du når du indsætter data??

Der skal det ikke være 1,5. Det skal være 1.5
Avatar billede TiHs Nybegynder
04. april 2007 - 12:34 #14
Perfekt. Mange mange tak for hjælpen.
Send et svar :o))
Avatar billede fennec Nybegynder
04. april 2007 - 12:44 #15
.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester