[PHP/MYSQL] sum of +

Pagina: 1
Acties:

  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Ben bezig met formule 1 result tabelletje maar heb problemen om de waarde voorkomend in een row bij elkaar op te tellen. Voor een beetje begripsvorming ...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+--------+------------------+------+-----+---------+-------+
| Field  | Type      | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+-------+
| uid    | int(10) unsigned |   |     | 0    |   |
| R1     | int(3)        | YES  |     | NULL    |    |
| R2     | int(3)        | YES  |     | NULL    |    |
| R3     | int(3)        | YES  |     | NULL    |    |
| R4     | int(3)        | YES  |     | NULL    |    |
| R5     | int(3)        | YES  |     | NULL    |    |
| R6     | int(3)        | YES  |     | NULL    |    |
| R7     | int(3)        | YES  |     | NULL    |    |
| R8     | int(3)        | YES  |     | NULL    |    |
| R9     | int(3)        | YES  |     | NULL    |    |
| R10    | int(3)        | YES  |     | NULL    |    |
| R11    | int(3)        | YES  |     | NULL    |    |
| R12    | int(3)        | YES  |     | NULL    |    |
| R13    | int(3)        | YES  |     | NULL    |    |
| R14    | int(3)        | YES  |     | NULL    |    |
| R15    | int(3)        | YES  |     | NULL    |    |
| R16    | int(3)        | YES  |     | NULL    |    |
| R17    | int(3)        | YES  |     | NULL    |    |
| Totaal | int(3)        | YES  |     | NULL    |    |
+--------+------------------+------+-----+---------+-------+
19 rows in set (0.00 sec)

En een kleine selectie daaruit.
mysql> select R1, R8, R9, R10, R11, Totaal  from TSresult where uid = 2; 
+------+------+------+------+------+--------+
| R1   | R8   | R9   | R10  | R11  | Totaal |
+------+------+------+------+------+--------+
|    7 |    3 |    6 |   12 |    0 |     81 |
+------+------+------+------+------+--------+
1 row in set (0.01 sec)

Ik wil nu R1 R8 R9 bij elkaar op tellen en doorgeven aan $totaal. Met $totaal update ik dan wel weer de waarde in kolom Totaal. Zat eerst te denken aan de optie SUM in een select query maar dan is het alleen maar mogelijk de waarden in een kolom op te tellen. Dus als uid nou de kolom was geweest dan was ik snel klaar en plaats dan Totaal dan wel in een andere tabel. Echter zijn de rows uid gebonden dat zou inhouden dat ik voor elke uid een kolom aan kan maken :? En dat wil ik niet ofcourse ;)

Zat met dit te stoeien en ik vraag me af of ik dan goed bezig ben.
PHP:
1
2
3
4
<?
$K1 = mysql_fetch_array(mysql_query("select R1, R8, R9  from TSresult WHERE uid = '2'"));
echo "sum(piet) = ".array_sum($K1)."";
?>

geeft dan als waarde sum(piet) = 32 wat natuurlijk 16 zou moeten zijn. Heb al een tiental andere opties geprobeerd maar kom er niet uit. Suggesties ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
drikus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 R1 .... 
 R2 ....
 R3 ....
 R4 ....
 R5 ....
 R6 ....
 R7 ....
 R8 ....
 R9 ....
 R10     ....
 R11     ....
 R12     ....
 R13     ....
 R14     ....
 R15     ....
 R16     ....
 R17     ....
Volgens mij signaleer ik hier een opsomming in de kolommen van een tabel. Ik weet niet wat deze tabel voor stelt, maar hoogst waarschijnlijk is dit niet fraai en makkelijk.
Suggesties ?
SUM over verschillende kolommen is inderdaad niet mogelijk. Het lijkt mij het beste als je je relationeel ontwerp een beetje aanpast en ook daadwerkelijk met relaties gaat werken...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Op zaterdag 17 november 2001 09:14 schreef mbravenboer het volgende:

[..]

Volgens mij signaleer ik hier een opsomming in de kolommen van een tabel. Ik weet niet wat deze tabel voor stelt, maar hoogst waarschijnlijk is dit niet fraai en makkelijk.
[..]
idd. uitslag van race1 race 2 etc.etc. En dit gaat allemaal prima.
SUM over verschillende kolommen is inderdaad niet mogelijk. Het lijkt mij het beste als je je relationeel ontwerp een beetje aanpast en ook daadwerkelijk met relaties gaat werken...
Ik zal niet zeggen dat ik een boek over php en mysql en de toepassingen daarvan zal schrijven maar bijna alles wat ik gebruik is relationeel maar deze table niet, behalve het uid, en ik zag ook geen andere oplossing.

Probeer in deze situatie eigenlijk een excelletje na te bootsen en ondanks dat het niet fraai is moet het toch wel kunnen om een aantal waarden in velden bij elkaar op te tellen tot 1 variabele. Ik zoek en pruts maar weer verder.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
drikus: idd. uitslag van race1 race 2 etc.etc. En dit gaat allemaal prima.
Nee, dat gaat niet prima ;) . Als er nu eens een race bijkomt? Het is gewoon makkelijker om hiervan een aparte tabel Race te maken.
behalve het uid, en ik zag ook geen andere oplossing.
Aparte tabel Race waarin races worden opgenomen die linken naar een uid in deze tabel?
en ondanks dat het niet fraai is moet het toch wel kunnen om een aantal waarden in velden bij elkaar op te tellen tot 1 variabele.
Dat kan ook wel, maar niet met SUM. Je kunt in je SELECT gewoon optellen met +.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Op zaterdag 17 november 2001 10:04 schreef mbravenboer het volgende:

Nee, dat gaat niet prima ;) . Als er nu eens een race bijkomt? Het is gewoon makkelijker om hiervan een aparte tabel Race te maken.
Nope races zijn fixed. Maar als het zo makkelijk is met een select op te tellen dan ga ik dat eens proberen. En zal eens kijken of het toch anders kan maar mot nu wel weg. ...

Verwijderd

tip verbouw je tabel om redundantie te verkomen, lees eerst eens iets over dingen als normaliseren en niam...

|id|racenummer|uitslag|coureur|....|

dan doe je zoiets als select sum(uitslag) from races where coureur = 'Verstappen' group by coureur....

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Op zaterdag 17 november 2001 10:15 schreef drikus het volgende:

[..]

Nope races zijn fixed. Maar als het zo makkelijk is met een select op te tellen dan ga ik dat eens proberen. En zal eens kijken of het toch anders kan maar mot nu wel weg. ...
En toch is uw datamodel bagger. Wat als er idd een race bijkomt of wegvalt? Races zijn niet zo fixed in F1. Het is pas enkele jaren geleden dat er 17 zijn ipv 16.

Maak gewoon tabellen 'Coureurs', 'teams', 'races' enzo... Een goede applicatie begint met een goed datamodel. Lees eens wat artikels en tutorials over normaliseren en denk dan eens na hoe je uw datamodel het best ontwerpt.

https://fgheysels.github.io/


  • drikus
  • Registratie: Juni 2000
  • Laatst online: 25-03 07:18
Zo moest het zijn (de relevante stukjes)
PHP:
1
2
3
4
5
6
<?
$Q1 = mysql_fetch_row(mysql_query("select R1 + R2 and so on and on + R17 from TSresult WHERE uid = '2'"));
$totaal = "$Q1[0]";

mysql_query("update TSresult set Totaal='$totaal' WHERE uid = '2'");
?>

En ja kheb nog een hoop te leren ;) Maar ja eerst pielen dan de manuals en boeken en dan echt toepassen is meestal de volgorde bij mij en ik denk bij velen. Maar bedankt voor de suggesties *D
Pagina: 1