Dubbele records beide weergeven

Status
Niet open voor verdere reacties.

sanma

Gebruiker
Lid geworden
11 dec 2008
Berichten
170
Hallo,

Ik heb de volgende sql code om dubbele IP adressen te filteren:
PHP:
SELECT gebruikersnaam, emailadres, lastiplog, 
 COUNT(lastiplog) AS lastiplog
FROM users 
GROUP BY lastiplog 
HAVING ( COUNT(lastiplog) > 1 ) AND lastiplog <> ''

Dit werkt perfect echter laat hij maar 1 gebruikersnaam zien en niet beide die hetzelfde IP adres hebben hoe doe ik dit?
 
Waarschijnlijk de GROUP BY op de kolom "gebruikersnaam" zetten in plaats van het IP
 
Hallo,

Als ik dit doe doet hij niks krijg de melding:
MySQL gaf een lege resultaat set terug (0 rijen). ( Query duurde 0.0038 sec )
 
wellicht met group_concat() ?[sql]SELECT gebruikersnaam, emailadres, lastiplog,
COUNT(lastiplog) AS lastiplog,
GROUP_CONCAT(gebruikersnaam) as namen
FROM users
GROUP BY lastiplog
HAVING ( COUNT(lastiplog) > 1 ) AND lastiplog <> ''[/sql]
 
wellicht met group_concat() ?[sql]SELECT gebruikersnaam, emailadres, lastiplog,
COUNT(lastiplog) AS lastiplog,
GROUP_CONCAT(gebruikersnaam) as namen
FROM users
GROUP BY lastiplog
HAVING ( COUNT(lastiplog) > 1 ) AND lastiplog <> ''[/sql]

Klopt niet, hierop zou MySQL gewoon een foutmelding moeten gooien. Je moet in je GROUP BY alle kolommen opnemen die je selecteert, met uitzondering van de AGGREGATE. Dus GROUP BY gebruikersnaam, emailadres, lastiplog.
 
Klopt niet, hierop zou MySQL gewoon een foutmelding moeten gooien. Je moet in je GROUP BY alle kolommen opnemen die je selecteert, met uitzondering van de AGGREGATE. Dus GROUP BY gebruikersnaam, emailadres, lastiplog.
Onzin, binnen mysql is dit normaal gedrag. Geforceerd groeperen, zoals dat bij "standaard" sql het geval is kan in sommige gevallen als resultaat hebben dat de uitvoertijd van de query langer wordt. Door de enorme hoeveelheid webapplicaties die gebruik maken van mysql is snelheid erg belangrijk. Maar ook gebruiksgemak waardoor er - in vergelijking met andere database software - erg veel ingebouwde functies en constanten in mysql zitten.

Ik zal voor de volledigheid ook een stukje uit de manual quoten:
MySQL extends the use of GROUP BY so that you can use nonaggregated columns or calculations in the SELECT list that do not appear in the GROUP BY clause. You can use this feature to get better performance by avoiding unnecessary column sorting and grouping.
Als het om andere database software ging had je gelijk, maar in dit geval gaf de topicstarter al aan dat het om mysql ging (bericht van 09:18 @ 23-04) en sla je de plank mis.
 
Nee, want in de meeste professionele productie-omgevingen staat MySQL wel volgens de standaarden afgesteld. Daarbij komt dat het in principe wiskundig niet klopt om die kolommen niet in de GROUP BY op te nemen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan