Forum » Server-Side scripting » Laatste resultaat terugkrijgen
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privebericht
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:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
id     naam
1    Jannick
2    Steven
3    Henk
4    Lars
5    Beatrix
6    Henk
7    Jannick
8    Francien
9    Coen
10    Frans
11    Mark
12    Francien


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:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
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
Laatst gewijzigd door Jannick op 2011-03-19 19:22:23
19-03-2011 19:21
Dit topic is 167 keer bekeken door 27 verschillende leden
Reacties op: "Laatste resultaat terugkrijgen"
1
Berichten: 277
avatar
Offline Stuur privébericht
Kun je me vertellen waarom je per se de laatste ID's van de dubbele resultaten wilt weergeven en niet de eerste?
19-03-2011 20:01
Berichten: 317
avatar
Offline Stuur privébericht
omdat ie die laatste wss wilt verwijderen ?
19-03-2011 20:04
Berichten: 277
avatar
Offline Stuur privébericht
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.
19-03-2011 20:06
Rapifia Europe
Berichten: 3716
avatar
Offline Stuur privébericht
En waarom verwijder je dan niet de eerste?
Wat boeit het of je de 1e of laatste records verwijderd als overal hetzelfde instaat?

Je zou namelijk wel DESC kunnen gebruiken, volgens mij moet dat werken.
19-03-2011 20:07
Berichten: 2123
avatar
Offline Stuur privébericht
Dit is een leuke, ga een poging doen hem voor je te schrijven, je hoort (leest) van me dadelijk.
19-03-2011 20:08
Rapifia Europe
Berichten: 3716
avatar
Offline Stuur privébericht
Dit werkt misschien:
Code | Selecteer Alles
minimaliseren
1
2
3
4
SELECT id
FROM tabel
GROUP BY naam
ORDER BY HAVING COUNT
naam ) >1 DESC
19-03-2011 20:10
Berichten: 2123
avatar
Offline Stuur privébericht
Bij nader inzien: zo spannend is hij helemaal niet...

Code | Selecteer Alles
minimaliseren
1
2
3
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.
19-03-2011 20:14
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
@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!!
19-03-2011 20:21
Reageer op: "Laatste resultaat terugkrijgen"
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden