(PHP) Performantes finden doppelter/ähnlicher Einträge
Julian von Mendel
- datenbank
1 Anonymous0 Hans0 Julian von Mendel1 Anonymous
Hallo,
ich habe eine MySQL-Datenbank mit 3000 Einträgen. Ich möchte jetzt mittels PHP alle 3000 Einträge finden, bei denen mind. eine der vorher bestimmten Spalten übereinstimmt, und diese dann nicht löschen, sondern eben nur alle Mehrfacheinträge ausgeben, um diese weiterverarbeiten zu können. Mein bisheriger Ansatz war, dass ich die Datensätze alle in ein Array lese, und dann mit PHP Mehrfachforkommnisse herauslösche (doofe Idee). Das lief mit meinen 5 Testeinträgen sehr gut, als ich dann aber die richtigen 3000 reingeladen hab, ging nichts mehr. Jetzt brauche ich eine Ersatzlösung. Ich habe http://www.plogmann.net/w/2/77/ gefunden, da wird erklärt, wie man eine temporäre Tabelle erstellen kann, "mittels eines SELECT Befehls mit GROUP-Anweisung in die temporäre Tabelle kopiert" und dann die alte Tabelle durch die temporäre ersetzt. Das Problem dabei ist, dass ich dann ja nicht weiß, was alles doppelt existiert hat, außer ich würde den Unterschied der beiden Tabellen rausfinden... was bestimmt wieder irgendwie langsam wäre.
Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?
Vielen Dank
Julian
Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?
Vielleicht hilft dir ja die Query weiter:
SELECT
a,b,count(*)
FROM
tabelle
GROUP BY
a,b
Kann mir jemand einen guten Tipp geben, wie ich mein Problem am besten löse?
Vielleicht hilft dir ja die Query weiter:
SELECT
a,b,count(*)
FROM
tabelle
GROUP BY
a,b
>
Oder das:
select a, count(a) from tabelle group by a having count(a) > 1
Gruß
Hans
Hallo,
SELECT
a,b,count(*)
FROM
tabelle
GROUP BY
a,b
Vielen Dank. Wenn ich jetzt für jedes Mehrfachergebnis nochmal die Daten anfordere, kann ich alle doppelten Einträge ausgeben. Das Beispiel von Hans wird bei mir leider mit einer Fehlermeldung beantwortet. Gibt es eine andere (funktionierende \*g\*) Möglichkeit nur die Ergebnisse mit count>1 anzuzeigen?
Schöne Grüße
Julian
--
"Real programmers can write assembly code in any language." - Larry Wall
SELECT
a,b,count(*)
FROM
tabelle
GROUP BY
a,b
>
> Vielen Dank. Wenn ich jetzt für jedes Mehrfachergebnis nochmal die Daten anfordere, kann ich alle doppelten Einträge ausgeben. Das Beispiel von Hans wird bei mir leider mit einer Fehlermeldung beantwortet. Gibt es eine andere (funktionierende \*g\*) Möglichkeit nur die Ergebnisse mit count>1 anzuzeigen?
~~~sql
SELECT
a,b,count(*) AS cnt
FROM
tabelle
WHERE
cnt > 1
GROUP BY
a,b
Hallo, (traust dich nicht deinen Namen zu posten? ;)
SELECT
a,b,count(*) AS cnt
FROM
tabelle
WHERE
cnt > 1
GROUP BY
a,b
super. Danke für die Hilfe.
Schöne Grüße
Julian
--
"Real programmers can write assembly code in any language." - Larry Wall
Hallo, (traust dich nicht deinen Namen zu posten? ;)
Mein Name ist Anonymous.
yo,
ich würde es mit Having angehen.
SELECT a, b, count(*) AS cnt
FROM tabelle
GROUP BY a,b
HAVING count(*) > 1
Ilja