Laatste resultaat terugkrijgen

  • Dag leden,


    Ik heb een vraag met betrekking tot MySQL. Ik heb een tabel met 5000 records, waar enkele dubbele accounts inzitten. Het is een samengevoegde tabel, dus sommige namen staan er dubbel in. Even wat voorbeelddata:



    Zoals je ziet komen de namen Jannick, Henk en Francien er vaker in voor. Nu wil ik de laatst toegevoegde matchende ID's, dus nummer 6, 7 en 12 verwijderen. Daarvoor had ik de volgende query in gedachten:


    PHP
    SELECT id
    FROM tabel
    GROUP BY naam
    HAVING COUNT( naam ) >1
    LIMIT 5


    Helaas komt deze terug met eerst voorkomende ID's, dus in de laatstgenoemde tabel de ID's 1, 3 en 8, en niet de nummers 6, 7 en 12.


    Is er een manier om de laatst matchende record weer te laten geven? Het werkt niet met ordenen, omdat ik dan gewoon 12, 7 en 6 terugkrijg.


    Alvast bedankt, en succes :)


    Groet,


    Jannick

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Die laatste worden al verwijderd, daar gebruikt hij de GROUP functie voor.


    Je kunt het laatste resultaat weergeven, maar... dat kost je dan wel wat extra queries.


    Voorbij je eerste query kun je een nieuwe toevoegen.


    Gebruik WHERE `blabla`='$naam_resultaat' ORDER BY `id` DESC LIMIT 0,1.
    Hiermee laat je hem op die naam zoeken en het laatst toegevoegde ID weergeven.

  • Bij nader inzien: zo spannend is hij helemaal niet...


    PHP
    SELECT MAX(id)
    FROM namen GROUP BY naam
    HAVING COUNT(naam) > 1


    MAX doet het werk voor je, MySQL zou eens een normale database moeten worden en wel normaal met agregate functions moeten werken, had je deze fout/probleem vanzelf ondekt.

  • Guido omdat het een tabel was met wisselende informatie, vanuit de ene (de eerste toegevoegde records) zijn er bepaalde velden gevuld, en vanuit de andere (de laatste records, die dus dubbel zijn) niet.


    L.Groot werkte niet op die manier; bij HAVING kan je niet sorteren op ASC of DESC.


    @KillingDevil Dat was 'm inderdaad! Dom dat ik daar niet eerder aan dacht..


    Dank iedereen!! :)

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!