SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.10.2004, 11:16:03
zorromaus zorromaus ist offline
Anfänger
 
Registriert seit: Mar 2003
Beiträge: 30
doppelte datensätze suchen und dann löschen

folgendes problem habe ich:

in einer datenbank mit mehreren tausend datensätzen gibt es massenhaft doppelte einträge (eMail-adressen) jetzt suche ich nach einer suchroutine und will dann die doppelten datensätze löschen bzw. ausfiltern.
ich habe schon überlegt mir z.b. den 1. datensatz vorzunehmen und dann mit den anderen datensätzen zu vergleichen,
dann den 2. datensatz, den 3. datensatz usw......
jetzt stelle ich aber fast das dieses schema ja ne halbe ewigkeit dauert. hat jemand einen besseren und vor allem schnelleren ansatzpunkt wie ich die doppelten datensätze herausfiltere?

danke Z
Mit Zitat antworten
  #2  
Alt 29.10.2004, 13:00:30
Ares Ares ist offline
Anfänger
 
Registriert seit: Oct 2004
Beiträge: 9
Mir fällt auf die schnelle nur eine Lösung ein.
Leg dir eine neue Tabelle an mit den Felder die du brauchst.

Dann machst du folgendes:

INSERT INTO table_new (field1,field2...) SELECT DISTINCT field_a,... FROM table_old;

Ein SELECT DISTINCT liefert nur die einträge, die eindeutig sind, das heißt wenn 100 mal "hallo" vorkommt listet er das nur einmal auf.

Bedenke aber das beim Select keine ID mit selectieren kannst, da du dann immer unterschiedliche zeilen hast.

Beispiel:
1,"hallo"
2,"hallo"

wird nicht zusammengefasst.

Du kannst ja erstmal einen SELECT DISTINCT auf deine Tabelle anwenden um zu schauen was rauskommt beim selektieren.

Eleganter ginge es mit subselect, aber mysql unterstützt sowas imho nicht.

MfG
Ares
Mit Zitat antworten
  #3  
Alt 29.10.2004, 13:05:21
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi,

mal aus dem Kopf raus, sprich unbedingt mit Testdaten testen, bevor Du es produktiv anwendest:

mit:
Code:
SELECT t1.primary-key AS pk1
      ,t2.primary-key AS pk2
  FROM tabelle1 AS t1 INNER JOIN tabelle1 AS t2 ON t1.email = t2.email 
 WHERE t1.primary-key < t2.primary-key // WICHTIG, sonst Kreuzprodukt aus allen Inhalten und quasi Endlosschleife!
bekommst Du die ids der doppelten Einträge raus. Diese stehen in pk1, pk2 dient der stichpunktartigen manuellen Kontrolle der Einträge, kann aber auch weggelassen werden.
Die IDs liesst Du Dir am besten aus und machst anschliessend einen DELETE FROM tabelle1 WHERE primary-key IN (...).

WICHTIG: Die JOIN- Bedingung muss natürlich über alle Felder gehen, die identisch sein müssen, damit ein Eintrag als doppelt gilt! Ansonsten schmeisst Du Dir z.B. den Eintrag "meier, info@a.c" raus, obwohl unter der gleichen Email- Adresse noch der Eintrag "müller, info@a.c" steht!!


edit:
ACHTUNG: MySQL unterscheidet nicht (immer?) zwischen GROSS- und kleinschreibung. Sprich: "a" und "A" werden beim Vergleich mit "=" als identisch behandelt. Achtet hier unbedingt drauf!



HTH,

Andy

P.S.: Doppelte Einträge kannst Du natürlich auch mit UNION bekommen, geht aber nicht in allen Versionen von MySQL.
P.S.S.: Achte darauf, daß Du für obige Abfrage auf die JOIN- Felder einen Index setzt, wenn es sehr viele Datensätze zum kontrollieren gibt, sonst kann es dauern.

Geändert von diver-network (15.11.2004 um 08:51:53 Uhr)
Mit Zitat antworten
  #4  
Alt 02.11.2004, 09:23:37
zorromaus zorromaus ist offline
Anfänger
 
Registriert seit: Mar 2003
Beiträge: 30
danke schön das hat mir schon mal geholfen.


gruß Z

p.s. das mit den testdaten habe ich nätürlich gemacht. danke
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:16:55 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt