phpbar.de logo

Mailinglisten-Archive

Langsamer Datenvergleich / Doppelte Daten finden

Langsamer Datenvergleich / Doppelte Daten finden

Robert Petuker rpetuker at gmx.de
Sam Mar 12 14:36:14 CET 2005


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