[PHP]/[MYSQL] Laatst opgevoerde record

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Situatie : Een tabel met daarin drie waarden

Userid :
Variabele :
Datum :

Nu wil ik de laatste variabele hebben per user. Deze variabele wordt per dag opgehoogd tot hij gevoelsmatig een te hoge waarde heeft, dan moet hij weer op nul gezet worden. Omdat het een log-bestand betreft moet ik ook de oude waarden behouden.

Dit is in access te maken mbv het kernwoord last. Maar dit kent mysql niet.

Geprobeerd met :
code:
1
2
3
4
select userid,variabele,max(datum)
from table
group by userid
having max(datum)

Maar dit werkt niet, want nu krijg ik alle regels terug waarvoor de userid en variabele uniek zijn ( wat ik zo vraag ) en als ik alleen group by userid doe dan krijg ik allerlei rare waarden terug voor variabele.

Wat ik dus nodig heb is de laatste variabele per user. En de laatste variabele is niet perse de hoogste variabele, waarom er een datumveld aan toegevoegd is.

De datums verschillen per user, alleen alles selecteren per user op 1 datum heb ik ook niks aan. Ik wil dus echt de laatste variabele zien die in het logbestand is gezet per user.

Dus als ik hem nu draai, dan wil ik de laatste variabele zien van user a die net (10 min geleden ) iets in de db gezet heeft. En ook de variabele die user b die al drie maanden ziek is in de db heeft gezet.

Edit :

Ok dan enkele voorbeeldgegevens.
code:
1
2
3
4
5
6
7
8
9
10
userid:  Variabele   Datum
a           1                01-01-2000
b           938            16-06-2000
a           534            17-07-2002
c            200           18-09-2002
a           104           20-10-2002
b           1048         01-01-2003
c           250           02-01-2003
c           3               03-02-2003
a           16            04-03-2003


Nu wil ik uit dit bovenstaande lijst hebben het onderstaande lijstje krijgen :
code:
1
2
3
a          16             04-03-2003
b          1048         01-01-2003
c           3              03-02-2003


De datumkolom hoef ik niet te hebben, maar dit leek mij wel handig om te kunnen sorteren.

Hopelijk nu iets duidelijker


Kan iemand mij tips geven

[ Voor 23% gewijzigd door Gomez12 op 24-03-2003 22:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Gomez12 schreef op 24 maart 2003 @ 21:17:
Dus als ik hem nu draai, dan wil ik de laatste variabele zien van user a die net (10 min geleden ) iets in de db gezet heeft. En ook de variabele die user b die al drie maanden ziek is in de db heeft gezet.
Dat lijkt mij heel normaal, wat wil je dan krijgen ( kan ik niet opmaken uit je verhaal).

[edit]
Als je alleen die van vandaag wilt hebben kan je bijv zeggen:
select userid,variabele,max(datum)
from table
where datum = curdate()
group by userid
having max(datum)

[ Voor 21% gewijzigd door Verwijderd op 24-03-2003 22:39 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op 24 March 2003 @ 22:35:
[...]

Dat lijkt mij heel normaal, wat wil je dan krijgen ( kan ik niet opmaken uit je verhaal).

[edit]
Als je alleen die van vandaag wilt hebben kan je bijv zeggen:

[...]
Wat jou heel normaal lijkt wil ik dus ook hebben, maar dit krijg ik dus niet voor mekaar.

En hoe goedbedoeld ook, aan die van vandaag heb ik niks.

Acties:
  • 0 Henk 'm!

Verwijderd

Gomez12 schreef op 24 March 2003 @ 22:57:
[...]
Wat jou heel normaal lijkt wil ik dus ook hebben, maar dit krijg ik dus niet voor mekaar.

En hoe goedbedoeld ook, aan die van vandaag heb ik niks.
Dat is wel vrij logisch idd dat je daar niets aan hebt, zie ik nu :p.

als ik het zo zie zou dit beter moeten werken:
code:
1
2
3
4
select userid,variabele,max(datum)
from table
group by userid
having datum = max(datum)

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Als ik de volgende query gebruik
code:
1
2
3
4
select userid,variabele,max(datum)
from table
group by userid
having datum = max(datum)

dan zegt mysql :
Unknown column 'datum' in 'having clause'
???

in de select kent hij hem wel maar in de having niet.

ook als ik hem alias in de select en dan de alias terug laat komen in de having kan hij dit niet aan.

Is dit een eigenaardigheidje van mysql of heb ik gewoon niet goed genoeg opgelet op school dat ik niet snap wat er fout is aan deze sql query???

Naja, in ieder geval bedankt ik zie morgen wel of er nog iemand op reageert, want nu ff slapen.

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Zoiets ?
code:
1
2
3
SELECT DISTINCT userid, variable, datum FROM table
ORDER by datum
LIMIT 0,3

Ik heb het niet getest, maar probeer het eens met LIMIT en DISTINCT

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Aan limit heb je in dit geval niets, aangezien het aantal users variabel is (denk ik, TS?).

Waarom zou je in die select die having by moeten hebben? Waarom niet gewoon dit:
code:
1
2
3
4
5
6
7
8
select distinct
  userid,
  variabele,
  max(datum)
from 
  table
group by 
  userid

[ Voor 2% gewijzigd door Rotjeknor op 25-03-2003 08:45 . Reden: kleine wijziging in query ]

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
mocean schreef op 25 March 2003 @ 00:45:
Zoiets ?
code:
1
2
3
SELECT DISTINCT userid, variable, datum FROM table
ORDER by datum
LIMIT 0,3

Ik heb het niet getest, maar probeer het eens met LIMIT en DISTINCT
Bedankt, dit gaat al een heel stuk de goeie richting op, alleen krijg ik nu alle waardes te zien die op de laatste datum (in het bestand) ingevoerd zijn. Terwijl ik de laatste variabele wil zien die een user heeft ingevoerd ( ongeacht de datum, gewoon de laatste waarde )
Rotjeknor schreef
Aan limit heb je in dit geval niets, aangezien het aantal users variabel is (denk ik, TS?).

Waarom zou je in die select die having by moeten hebben? Waarom niet gewoon dit:

code:
1
2
3
4
5
6
7
8
select distinct
  userid,
  variabele,
  max(datum)
from 
  table
group by 
  userid
Aan limit heb ik niets totdat ik ook het aantal users kan uitrekenen met een andere query die gewoon het aantal unieke users telt.

En die code van jou die geeft wel alle usersids. Maar bij sommige ( / de meeste ) usersids heb ik geen variabele staan, geeft een heel raar resultaat.

Sorry dat ik hem toch weer opengooi, maar ik ben er toch niet helemaal uit. Als ik de code van mocean gebruik krijg ik namelijk alleen de users te zien die op de laatste datum (van het inlogbestand) erin zijn gezet, terwijl ik de laatste datum per user moet weten.

Vb.
Als iemand op zondag een variabele zet, en ik draai deze query ook op zondag dan krijg ik maar een userid te zien met een variabele. Terwijl ik dus de laatste variabele per user wil zien.

[ Voor 24% gewijzigd door Gomez12 op 25-03-2003 10:40 ]

Pagina: 1