Vraag & Antwoord

Webprogrammeren & scripting

[MySQL] Hij joint niet de goeie record..

2 antwoorden
  • Okeej van te voren dit: Degenen die weer willen gaan reageren met 'lees een basis tutotrial' of 'dat staat echt overal als je beetje leest', klik aub op de 'Vorige' knop.. Ik kom hier met deze vraag omdat ik al die opties al geprobeerd heb en niks gevonden heb! Het is elke keer raak als ik een vraag heb.. Mijn probleem: Ik heb een tabel met accounts en een tabel waarin elke login(poging) wordt opgeslagen (user-id/datetime). Nu wil ik een overzicht van alle accounts en de laatste keer dat ze ingelogd hebben.[code:1:2ffb9cdfca]SELECT Leerlingen. * , LoginHistory.Log FROM Leerlingen LEFT JOIN LoginHistory ON LoginHistory.LrId = Leerlingen.Id[/code:1:2ffb9cdfca]Dit geeft natuurlijk voor elke login de user-info weer dus daar heb ik dan dit van gemaakt:[code:1:2ffb9cdfca]SELECT Leerlingen. * , LoginHistory.Log FROM Leerlingen LEFT JOIN LoginHistory ON LoginHistory.LrId = Leerlingen.Id GROUP BY Leerlingen.Nummer[/code:1:2ffb9cdfca]Waarbij Nummer niet het id is maar het account nummer van de leerling op school, ook uniek dus. Probleem: Het resultaat wat hij nu geeft is bijna wat ik wil.. hij geeft alleen niet de laatste loginpoging maar de eerste... Hoe krijg ik hem zover dat hij de laatste pakt? ORDER BY heeft pas invloed na de JOIN dus werkt niet...
  • [quote:25e8517ea0="Safihre"]Probleem: Het resultaat wat hij nu geeft is bijna wat ik wil.. hij geeft alleen niet de laatste loginpoging maar de eerste... [/quote:25e8517ea0] Dit is een probleem van mysql. Deze staat je toe om ook niet-geaggregeerde data - welke niet is opgenomen in de GROUP BY - op te nemen in de resultaten. En daarbij is het niet helemaal duidelijk welk record je terugkrijgt. Als je het mij vraagt compleet onlogisch (en onjuist) gedrag. Andere databases zul je hier overigens ook niet op kunnen betrappen. Wat je moet doen is de MAX(datum) opnemen in je query. Dus iets als [code:1:25e8517ea0] SELECT l.nummer, MAX(datum) FROM leerlingen l LEFT OUTER JOIN LoginHistory h ON (h.LrId = l.Id) GROUP BY l.nummer [/code:1:25e8517ea0]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.