Mailinglisten-Archive |
Am Freitag, 11. März 2005 13:27 schrieb Marcus Füg: > Hallo, > > ich bin gerade dabei ein paar Adress Daten zu vergleichen und löse das > über eine MySQL Datenbank. > In der DB habe ich ungefähr 10.000 Datensätze und möchte diese auf > doppelte Einträge prüfen, doch mit meinem SQL Statement ist das recht > langsam oder liege ich da falsch? Kann man da noch was optimieren??? > > CREATE TABLE `tmp_kunden` ( > `id` int(8) NOT NULL auto_increment, > `adresse` enum('y','n') NOT NULL default 'n', > `firma` varchar(55) NOT NULL default '', > `name` varchar(35) NOT NULL default '', > `strasse` varchar(25) NOT NULL default '', > `hnr` varchar(8) NOT NULL default '', > `plz` varchar(10) NOT NULL default '', > `land` varchar(5) default NULL, > `ort` varchar(25) NOT NULL default '', > `telefon` varchar(25) NOT NULL default '', > PRIMARY KEY (`id`), > UNIQUE KEY `id` (`id`), > UNIQUE KEY `kd_nr` (`kd_nr`), > KEY `adresse` (`adresse`), > KEY `firma` (`firma`), > KEY `name` (`name`), > KEY `strasse` (`strasse`), > KEY `hnr` (`hnr`), > KEY `plz` (`plz`), > KEY `ort` (`ort`), > ) TYPE=MyISAM PACK_KEYS=0 COMMENT='Kunden' AUTO_INCREMENT=10917 ; > > SELECT t.id AS id, CONCAT( t.firma, ' ', t.name ) AS Name, CONCAT( > t.strasse, ' ', t.hnr ) AS Strasse, CONCAT( t.plz, ' ', t.ort ) AS Ort, > t2.id AS id2, CONCAT( t2.firma, ' ', t2.name ) AS Name2, CONCAT( > t2.strasse, ' ', t2.hnr ) AS Strasse2, CONCAT( t2.plz, ' ', t2.ort ) AS > Ort2 FROM tmp_kunden t, tmp_kunden t2 > WHERE t.id <> t2.id > AND t.firma LIKE t2.firma > AND t.name LIKE t2.name > AND t.strasse LIKE t2.strasse > LIMIT 0 , 100 > > > Grüße Marcus > SELECT t.id AS id, CONCAT( t.firma, ' ', t.name ) AS Name, CONCAT( > t.strasse, ' ', t.hnr ) AS Strasse, CONCAT( t.plz, ' ', t.ort ) AS Ort, > t2.id AS id2, CONCAT( t2.firma, ' ', t2.name ) AS Name2, CONCAT( > t2.strasse, ' ', t2.hnr ) AS Strasse2, CONCAT( t2.plz, ' ', t2.ort ) AS > Ort2 FROM tmp_kunden t, tmp_kunden t2 > WHERE t.id <> t2.id > AND t.firma LIKE t2.firma > AND t.name LIKE t2.name > AND t.strasse LIKE t2.strasse > LIMIT 0 , 100 Die klassische Lösung ist das HAVING-Klausel im SQL-Statement select firma from tmp_kunden group by firma having count(*) > 1; Hier werden alle Firmennamen angezeigt, die mehr als einmal vorhanden sind. MfG -- ----====oooOOO Robert Petuker OOOooo====---- -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive