rekenen met tabellen
ik ben op dit moment bezig met een scoresysteem dat werkt met een database
gebruikers
-naam
-foto
-punten
-id
punten
-aantal_punten
-id_gebruiker
u is mijn vraag
de tabel punten daar staan bij aantal punten bijvoorbeeld "30" in de volgende waar het id hetzelfde is staat bijvoorbeeld "500". hoe kan ik er voor zorgen dat hij die 2 optelt. zodat ik dat totaal in de tabel gebruikers in "punten" kan steken.
Alvast bedankt
groeten knipper
gebruikers
-naam
-foto
-punten
-id
punten
-aantal_punten
-id_gebruiker
u is mijn vraag
de tabel punten daar staan bij aantal punten bijvoorbeeld "30" in de volgende waar het id hetzelfde is staat bijvoorbeeld "500". hoe kan ik er voor zorgen dat hij die 2 optelt. zodat ik dat totaal in de tabel gebruikers in "punten" kan steken.
Alvast bedankt
groeten knipper
Doe het met een join inderdaad en een sum functie op de punten tabel. Zoiets als dit:
SELECT gebruikers.id, gebruikers.naam, sum(punten.aantal_punten) AS totaal_punten
FROM gebruikers
LEFT JOIN punten ON gebruikers.id = punten.id_gebruiker
GROUP BY gebruikers.id
Uit mijn hoofd, zonder te testen, maar zou zo moeten werken.
Wat je in elk geval niet wilt, is het totaal van de punten ook in de gebruikers tabel opslaan. Dan moet je namelijk elke keer die tabel gaan updaten als er een record bijkomt in de punten tabel. Niet alleen overbodige acties op je database, ook nog eens een recept voor fouten en inconsistente data.
SELECT gebruikers.id, gebruikers.naam, sum(punten.aantal_punten) AS totaal_punten
FROM gebruikers
LEFT JOIN punten ON gebruikers.id = punten.id_gebruiker
GROUP BY gebruikers.id
Uit mijn hoofd, zonder te testen, maar zou zo moeten werken.
Wat je in elk geval niet wilt, is het totaal van de punten ook in de gebruikers tabel opslaan. Dan moet je namelijk elke keer die tabel gaan updaten als er een record bijkomt in de punten tabel. Niet alleen overbodige acties op je database, ook nog eens een recept voor fouten en inconsistente data.
Plus dat je het select statement wilt laten voorafgaan door een "UPDATE gebruikers ..." statement zodat het resultaat van je SELECT ingevoerd wordt bij je gebruikers.
In MySQL krijg je iets als;
UPDATE gebruiker, (
SELECT gebruiker.id, SUM(punten.punten) AS totaal_punten
FROM gebruiker JOIN punten ON gebruiker.id = punten.gid
GROUP BY gebruiker.id
) AS extra_punten SET gebruiker.totaal = gebruiker.`totaal` + extra_punten.totaal_punten
WHERE gebruiker.id = extra_punten.id
waarna je de punten tabel als de bliksem moet legen.
In MySQL krijg je iets als;
UPDATE gebruiker, (
SELECT gebruiker.id, SUM(punten.punten) AS totaal_punten
FROM gebruiker JOIN punten ON gebruiker.id = punten.gid
GROUP BY gebruiker.id
) AS extra_punten SET gebruiker.totaal = gebruiker.`totaal` + extra_punten.totaal_punten
WHERE gebruiker.id = extra_punten.id
waarna je de punten tabel als de bliksem moet legen.