/ Forside/ Teknologi / Udvikling / SQL / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Sum i mysql table
Fra : IvanMort
Vist : 749 gange
100 point
Dato : 06-11-02 10:59

Jeg har en table :

CREATE TABLE table1 (
id int(10) NOT NULL auto_increment,
Fornavn text NOT NULL,
Efternavn text NOT NULL,
titel text NOT NULL,
tlf_privat text NOT NULL,
kirke text NOT NULL,
postnr text NOT NULL,
www text NOT NULL,
bynavn text NOT NULL,
email text NOT NULL,
tlf_arbejde text NOT NULL,
mobil text NOT NULL,
kommentarer text NOT NULL,
adresse text NOT NULL,
type_kirke text NOT NULL,
fax text NOT NULL,
løfte_1_beløb text NOT NULL,
løfte_1_event text NOT NULL,
løfte_1_dato text NOT NULL,
løfte_2_beløb text NOT NULL,
løfte_2_event text NOT NULL,
løfte_2_dato text NOT NULL,
løfte_3_beløb text NOT NULL,
løfte_3_event text NOT NULL,
løfte_3_dato text NOT NULL,
totalt_løfte text NOT NULL,
betalt_løfte_1 text NOT NULL,
dato_betalt_1 text NOT NULL,
betaling_1 text NOT NULL,
betaling_5 text NOT NULL,
betaling_9 text NOT NULL,
betalt_løfte_2 text NOT NULL,
dato_Betalt_2 text NOT NULL,
betaling2 text NOT NULL,
betaling4 text NOT NULL,
betaling6 text NOT NULL,
betalt_løfte_3 text NOT NULL,
dato_betalt_3 text NOT NULL,
betaling3 text NOT NULL,
betaling7 text NOT NULL,
betaling8 text NOT NULL,
betalte_løfter text NOT NULL,
gave_1 text NOT NULL,
gave_2 text NOT NULL,
gave_3 text NOT NULL,
gave_4 text NOT NULL,
dato_gave_1 text NOT NULL,
dato_gave_2 text NOT NULL,
dato_gave_3 text NOT NULL,
dato_gave_4 text NOT NULL,
betaling_a text NOT NULL,
betaling_b text NOT NULL,
betaling_c text NOT NULL,
betaling_d text NOT NULL,
økonomisk_støtte text NOT NULL,
info_PR text NOT NULL,
bøn text NOT NULL,
børnenetværk text NOT NULL,
ungdomsnetværk text NOT NULL,
musik text NOT NULL,
finans text NOT NULL,
vejledning text NOT NULL,
praktisk text NOT NULL,
værtskab text NOT NULL,
Total_KR_Betalt text NOT NULL,
Løfte_Tilbage text NOT NULL,
betalt_løfte_4 text NOT NULL,
betalt_løfte_5 text NOT NULL,
betalt_løfte_6 text NOT NULL,
betalt_løfte_7 text NOT NULL,
betalt_løfte_8 text NOT NULL,
betalt_løfte_9 text NOT NULL,
dato_betalt_4 text NOT NULL,
dato_betalt_5 text NOT NULL,
dato_betalt_6 text NOT NULL,
dato_betalt_7 text NOT NULL,
dato_betalt_8 text NOT NULL,
dato_betalt_9 text NOT NULL,
update date NOT NULL default '2002-10-31',
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM;

er det muligt at lægge felter sammen som i et regneark som Exel??
eks.: 'løfte_1_beløb' + 'løfte_2_beløb' + 'løfte_3_beløb' = 'totalt_løfte'
eks.: 'totalt_løfte' - 'Total_KR_Betalt' = 'Løfte_Tilbage'

 
 
Kommentar
Fra : Nyhedsbruger


Dato : 06-11-02 11:07

IvanMort skrev:

> Jeg har en table :
>
> CREATE TABLE table1 (

Du behøver egentlig ikke sende hele tabelstrukturen for at spørge
om man kan lægge felter sammen.

> er det muligt at lægge felter sammen som i et regneark som Exel??
> eks.: 'løfte_1_beløb' + 'løfte_2_beløb' + 'løfte_3_beløb' =

Du kan altid gøre det i en select-statement:

   SELECT felt1 + felt2 + felt3 as total

Som oftest vil det være den bedste løsning.

Du kan også altid gemme en beregnet værdi i et normalt felt:

   UPDATE tabel SET total = felt1 + felt2 + felt3

- men her er der risiko for at den gemte værdi ikke er korrekt (du
skal selv indbygge en logik der sørger for at opdatere totalfeltet
når et af underfelterne ændrer sig)


Endelig kan man i visse databasesystemer (jeg ved ikke om mysql er
et af dem) have deciderede beregnede felter i en tabel. Det giver
dog en række andre problemer - i hvert fald i MS SQL hvor jeg har
prøvet det. Hvis databasen understøtter views (gemte select-
sætninger) kan man også sagtens lægge beregnede felter ind her -
men det er ikke mindre performancekrævende end et tilsvarende
select (bare lettere at arbejde med).
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Kommentar
Fra : IvanMort


Dato : 06-11-02 12:05

SELECT løfte_1_beløb + løfte_2_beløb + løfte_3_beløb as totalt_løfte

resultat:

SQL-query : [Edit]
SELECT løfte_1_beløb + løfte_2_beløb + løfte_3_beløb as totalt_løfte LIMIT 0, 30
MySQL said:
You have an error in your SQL syntax near 'LIMIT 0, 30' at line 1

UPDATE temp SET totalt_løfte = løfte_1_beløb + løfte_2_beløb + løfte_3_beløb

resultat:
virker fint man skal køre hver gang man sætter et tal ind...


Kommentar
Fra : Nyhedsbruger


Dato : 06-11-02 11:25

IvanMort skrev:

> Jeg har en table :

Og jeg glemte lige et par kommentarer til selve tabellen. Det har
intet med dit spørgsmål at gøre - men sådan er det indimellem at
skrive på usenet

Først og fremmest giver du alle felter (pånær 2) datatypen text.
Den type er beregnet til tekstdata op til ca. 65.000 tegn. Det
virker noget voldsomt at bruge den type til normale tekstfelter som
navn, adresse, telefonoplysninger mv. Prøv at kigge på CHAR, der
kan indeholde op til 255 tegn (man definerer selv hvor mange - fx
med CHAR(50) som giver et felt på max 50 tegn).

Derudover bruger du en del danske bogstaver. Det er ikke sikkert at
det giver nogen problemer - men hvis du fx skal kalde databasen via
en hjemmeside kan det give problemer med feltnavne der indeholder
ikke-ASCII-tegn.

Så har du et felt kaldet "update". Det er måske heller ikke et
problem i mysql (jeg ved ikke om programmet er versalfølsomt og om
det i givet fald kun er UPDATE der er reserveret) - men generelt
bør man undgå at bruge reserverede ord (fx Date, Update, By etc.) i
feltnavne.

Endelig indeholder din tabel flere gentagne grupper (fx løfte_*_*).
Den slags bør - i hvert fald i teorien - flyttes ud i selvstændige
tabeller, for at normalisere databasen. Der har tidligere været
nogle rigtig gode gennemgange af databasenormalisering her i
gruppen - jeg skal prøve at se om jeg kan finde dem frem igen
(andre skal endelig byde ind).
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Kommentar
Fra : IvanMort


Dato : 06-11-02 12:45

nu har jeg ændret dem til : CHAR(30)
fjernet æøå & _ men :

Error
SQL-query : [Edit]
SELECT lofte1belob + lofte2belob + lofte3belob as totaltlofte LIMIT 0, 30
MySQL said:
You have an error in your SQL syntax near 'LIMIT 0, 30' at line 1


Kommentar
Fra : IvanMort


Dato : 06-11-02 13:17

nu ser table ud som :

CREATE TABLE temp (
id int(10) NOT NULL auto_increment,
fornavn varchar(30) NOT NULL default '',
efternavn varchar(30) NOT NULL default '',
titel varchar(30) NOT NULL default '',
tlfprivat varchar(30) NOT NULL default '',
kirke varchar(30) NOT NULL default '',
postnr varchar(30) NOT NULL default '',
www varchar(30) NOT NULL default '',
bynavn varchar(30) NOT NULL default '',
email varchar(30) NOT NULL default '',
tlfarbejde varchar(30) NOT NULL default '',
mobil varchar(30) NOT NULL default '',
kommentarer varchar(255) NOT NULL default '',
adresse varchar(30) NOT NULL default '',
typekirke varchar(30) NOT NULL default '',
fax varchar(30) NOT NULL default '',
lofte1belob varchar(30) NOT NULL default '0',
lofte1event varchar(30) NOT NULL default '',
lofte1dato date NOT NULL default '0000-00-00',
lofte2belob varchar(30) NOT NULL default '0',
lofte2event varchar(30) NOT NULL default '',
lofte2dato date NOT NULL default '0000-00-00',
lofte3belob varchar(30) NOT NULL default '0',
lofte3event varchar(30) NOT NULL default '',
lofte3dato date NOT NULL default '0000-00-00',
totaltlofte varchar(30) NOT NULL default '0',
betaltlofte1 varchar(30) NOT NULL default '0',
datobetalt1 date NOT NULL default '0000-00-00',
betaling1 varchar(30) NOT NULL default '0',
betaling5 varchar(30) NOT NULL default '0',
betaling9 varchar(30) NOT NULL default '0',
betaltlofte2 varchar(30) NOT NULL default '0',
datobetalt2 date NOT NULL default '0000-00-00',
betaling2 varchar(30) NOT NULL default '0',
betaling4 varchar(30) NOT NULL default '0',
betaling6 varchar(30) NOT NULL default '0',
betaltlofte3 varchar(30) NOT NULL default '0',
datobetalt3 date NOT NULL default '0000-00-00',
betaling3 varchar(30) NOT NULL default '0',
betaling7 varchar(30) NOT NULL default '0',
betaling8 varchar(30) NOT NULL default '0',
betaltelofter varchar(30) NOT NULL default '0',
gave1 varchar(30) NOT NULL default '0',
gave2 varchar(30) NOT NULL default '0',
gave3 varchar(30) NOT NULL default '0',
gave4 varchar(30) NOT NULL default '0',
datogave1 date NOT NULL default '0000-00-00',
datogave2 date NOT NULL default '0000-00-00',
datogave3 date NOT NULL default '0000-00-00',
datogave4 date NOT NULL default '0000-00-00',
betalinga varchar(30) NOT NULL default '0',
betalingb varchar(30) NOT NULL default '0',
betalingc varchar(30) NOT NULL default '0',
betalingd varchar(30) NOT NULL default '0',
okonomiskstotte varchar(50) NOT NULL default '',
infopr varchar(50) NOT NULL default '',
bon varchar(50) NOT NULL default '',
bornenetvaerk varchar(50) NOT NULL default '',
ungdomsnetvaerk varchar(50) NOT NULL default '',
musik varchar(50) NOT NULL default '',
finans varchar(50) NOT NULL default '',
vejledning varchar(50) NOT NULL default '',
praktisk varchar(50) NOT NULL default '',
vaertskab varchar(50) NOT NULL default '',
totalkrbetalt varchar(30) NOT NULL default '0',
loftetilbage varchar(30) NOT NULL default '0',
betaltlofte4 varchar(30) NOT NULL default '0',
betaltlofte5 varchar(30) NOT NULL default '0',
betaltlofte6 varchar(30) NOT NULL default '0',
betaltlofte7 varchar(30) NOT NULL default '0',
betaltlofte8 varchar(30) NOT NULL default '0',
betaltlofte9 varchar(30) NOT NULL default '0',
datobetalt4 date NOT NULL default '0000-00-00',
datobetalt5 date NOT NULL default '0000-00-00',
datobetalt6 date NOT NULL default '0000-00-00',
datobetalt7 date NOT NULL default '0000-00-00',
datobetalt8 date NOT NULL default '0000-00-00',
datobetalt9 date NOT NULL default '0000-00-00',
updatedato date NOT NULL default '0000-00-00',
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM;

Kommentar
Fra : IvanMort


Dato : 07-11-02 12:29

kan man ikke skrive en kode i felt : totaltlofte
som siger at den skal hente tal fra : lofte1belob, lofte2belob & lofte3belob

Kommentar
Fra : strarup


Dato : 07-11-02 23:40

Hej Ivan,

ang. Jens Gyldenkærne Clausen, så er han nyhedsbruger, og hvis du vil sende meddelser ud til nyhedsgruppen ska' du trykke på "skriv til nyhedsbruger"... du ka' læse lidt om det i dette tip... "Kontakt til nyhedsgrupperne"... -->
http://www.kandu.dk/dk/tip/2218

mvh.

Strarup


Kommentar
Fra : IvanMort


Dato : 11-11-02 16:05

men det er stadig en command der skal køres hver gang man skriver et tal ind,
kan man ikke lave en fast command der køre automatisk på dette felt?

Accepteret svar
Fra : pmbruun

Modtaget 100 point
Dato : 11-11-02 16:59

Aha! Jeg tror det du mener er, at der skal være en kolonne i table1 som altid er summen af de andre felter, også når der indsættes nye værdier.

Den mekanisme findes i mange implementationer af SQL, og hedder "triggers".

Svaret på dit spørgsmål, selv om det må skuffe dig, er, at MySQL ikke implementerer triggers, og at den organisation, som vedligeholder MySQL ikke har planer om at tilføje en sådan funktionalitet.

Du kan bruge PostgeSQL i stedet. Den er også gratis. Det er dog ikke helt enkelt at benytte triggers, så jeg foreslår at du benytter et view i stedet - det er lidt lettere at få rigtigt.

Jeg er bange for, at du ikke får et svar, som gør dig glad, kun et, som er rigtigt...

Med venlig hilsen

Peter M. Bruun

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste