mysql gegevens berekenen (twee rijen van elkaar aftrekken)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Qyra zayra

qyra zayra

19/05/2019 20:41:47
Quote Anchor link
Hallo,

ik heb een nieuwe relationele database gemaakt (met hulp van enkelen onder jullie ;-) ). Ik denk dat het goed gelukt is, en heb al heel wat kolommen kunnen "berekenen" met data uit andere kolommen / tabel.
Er ontbreekt me nog één kolom om te berekenen.. maar hier loop ik een beetje vast..

Ik zou de gewichttoename tov van de vorige dag willen berekenen (maw de data van twee rijen van elkaar aftrekken). Op onderstaande foto kun je een screenshot zien van een naar csv geexporteerde tabel. De kolom met waarde "0" moet ik nog kunnen berekenen..


Afbeelding


Kan iemand me zeggen of dit uberhaupt mogelijk is.. en als het mogelijk, kunnen jullie me op weg zetten?

Alvasr heel erg bedankt
Gewijzigd op 19/05/2019 20:50:38 door - Ariën -
 
PHP hulp

PHP hulp

15/11/2024 10:30:13
 
Rob Doemaarwat

Rob Doemaarwat

19/05/2019 21:17:20
Quote Anchor link
Stel dat wat ik hierboven zie het resultaat is van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
select * from pup_gewicht where pup_id = 5

Dan krijg je de gewichtstoename tov vorige meting door (het commentaar achter de regels weglaten bij uitvoeren):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
select pg.*,pg.gewicht_ochtend - (
  select pg.gewicht_avond
  from pup_gewicht
  where pup_id = pg.pup_id            //zelfde pup
    and datum < pg.datum              //vooor de huidige datum (dus niet de huidige)
  order by pg.datum desc              //nieuwste eerst = gisteren bovenaan
  limit 1                             //alleen de eerste = gisteren
) as gewicht_toename_vorige_dag
from pup_gewicht pg
where pup_id = 5
Gewijzigd op 19/05/2019 21:18:48 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

19/05/2019 21:31:00
Quote Anchor link
En als het niet lukt in MySQL kun je dit natuurlijk ook on-the-fly berekenen in PHP, ook dat is een prima oplossing.
 
Qyra zayra

qyra zayra

19/05/2019 21:45:41
Quote Anchor link
@rob Doemaarwat

Dank je wel voor je antwoord...

Als ik het goed begrijp is dit de berekening om de gewichtstoename tussen morgen en avond te berekenen..
Waar ik eigenlijk naar op zoek ben is om de gewichtstoename te berekenen tussen twee opeenvolgende avonden..

Als ik in deze regel " select pg.*,pg.gewicht_ochtend - ( select pg.gewicht_avond "
ochtend vervang door avond dan bekom ik "0" als uitkomst...


@Thomas van den Heuvel .. oohh ik ben nog maar een beginner in mysql dus php is voor mij nog een brug te ver.. haha
 
Rob Doemaarwat

Rob Doemaarwat

19/05/2019 21:59:53
Quote Anchor link
Ja, zat een foutje in zie ik nu. Moet zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
select pg.*,pg.gewicht_avond - (      //<- hier avond van gemaakt voor avond-avond verschil
  select gewicht_avond                //<- hier zat foutje, alias prefix weggehaald
  from pup_gewicht
  where pup_id = pg.pup_id            //zelfde pup
    and datum < pg.datum              //vooor de huidige datum (dus niet de huidige)
  order by pg.datum desc              //nieuwste eerst = gisteren bovenaan
  limit 1                             //alleen de eerste = gisteren
) as gewicht_toename_vorige_dag
from pup_gewicht pg
where pup_id = 5
 
Qyra zayra

qyra zayra

19/05/2019 22:15:13
Quote Anchor link
waw.. het is gelukt!! Dank je wel..

Is het ook mogelijk om dit om te zetten naar een update statement?
 
Rob Doemaarwat

Rob Doemaarwat

19/05/2019 22:49:48
Quote Anchor link
Volgens mij zou dit moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
update pup_gewicht pg
set gewicht_toename_vorige_dag = pg.gewicht_avond - (
  select gewicht_avond
  from pup_gewicht
  where pup_id = pg.pup_id
    and datum < pg.datum
  order by pg.datum desc
  limit 1
)
where pup_id = 5
  and gewicht_toename_vorige_dag is null
 
Qyra zayra

qyra zayra

19/05/2019 23:01:58
Quote Anchor link
:( ik krijg deze error...
#1093 - You can't specify target table 'pg' for update in FROM clause

het spijt me dat ik zo veel vragen stel.. maar heb nog nooit met statements met "pg" erin gewerkt..
 
Rob Doemaarwat

Rob Doemaarwat

20/05/2019 07:08:22
Quote Anchor link
Even voor de zekerheid: welke database gebruik je (naam + versienummer)? (dit kan nl. wel in moderne versies van MariaDB).

"pg" is gewoon een alias. Omdat ik in de sub-select 2x naar pup_gewicht verwijs moet ik er voor zorgen dat ik ze uit elkaar kan houden. Vandaar dat ik een alias toeken ("pg" = pup_gewicht). Als je overal "pg" vervang door "whatever" werkt het ook.
 
Adoptive Solution

Adoptive Solution

20/05/2019 08:05:45
Quote Anchor link
Met een kleine aanpassing zou Oplossing 1 het moeten doen :

https://7php.com/mysql-update-select-statement-1093/
 
Qyra zayra

qyra zayra

20/05/2019 08:58:58
Quote Anchor link
@rob

ik heb een mysql database , ik log in via phpmyadmin...

Mocht je een beter alternatief hebben.. dan wil ik graag bijleren ;-)
 
- Ariën  -
Beheerder

- Ariën -

20/05/2019 09:42:07
Quote Anchor link
Ikzelf gebruik HeidiSQL, maar als je deze ook voor je productie-site (online) wilt gebruiken, moet de server wel poort 3306 inkomend toestaan.

Anderzijds is het ook ideaal voor lokale ontwikkeling, omdat je niet via de webserver werkt, en geen uploadlimieten hebt.
 
Qyra zayra

qyra zayra

20/05/2019 12:26:46
Quote Anchor link
@ Ariën..

ik ben een mac user.. :(
dus ik vrees dat heidisql geen optie is voor mij.. :(
 
- Ariën  -
Beheerder

- Ariën -

20/05/2019 12:32:39
Quote Anchor link
Dan Googlen we even verder:

https://alternativeto.net/software/heidisql/?platform=mac
MySQL Workbench, Sequel Pro,DataGrip, naviCat en zo zijn er nog een hoop alternatieven.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.