Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[MySQL] Hij joint niet de goeie record..

Safihre
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

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