Ik wil dus dubbele records verwijderen uit een groote tabel met 42000+ records.
Op google heb ik heel oplossingen gevonden maar die werkten bij mj niet. Ik ben ook al de hele avond zo'n beetje bezig.
Een oplossing in php heb ik ook gezien, maar mijn servertje trekt het niet om 42471 resultaten tegen elkaar te vegelijken als array of variabelen.
Tabel structuur:
CREATE TABLE `gb01_countries` (
ìd`bigint(15) unsigned NOT NULL auto_increment
`ip_range_from` bigint(10) unsigned NOT NULL default '0',
`ip_range_to` bigint(10) unsigned NOT NULL default '0',
`country_code_short` char(2) NOT NULL default '',
`country_name` varchar(255) NOT NULL default '',
KEY `ip_range_from` (`ip_range_from`),
KEY `ip_range_to` (`ip_range_to`)
) TYPE=MyISAM;
Deze tabel bevat dat van www.ip-to-country.com
Volledig CSV bestand kan je hier gratis downloaden
Daarmee kan je ip adressen vergelijken tegen landen.
Querie die ik zelf heb geprobeerd, in meerdere variaties:
Op google heb ik heel oplossingen gevonden maar die werkten bij mj niet. Ik ben ook al de hele avond zo'n beetje bezig.
Een oplossing in php heb ik ook gezien, maar mijn servertje trekt het niet om 42471 resultaten tegen elkaar te vegelijken als array of variabelen.
Tabel structuur:
CREATE TABLE `gb01_countries` (
ìd`bigint(15) unsigned NOT NULL auto_increment
`ip_range_from` bigint(10) unsigned NOT NULL default '0',
`ip_range_to` bigint(10) unsigned NOT NULL default '0',
`country_code_short` char(2) NOT NULL default '',
`country_name` varchar(255) NOT NULL default '',
KEY `ip_range_from` (`ip_range_from`),
KEY `ip_range_to` (`ip_range_to`)
) TYPE=MyISAM;
Deze tabel bevat dat van www.ip-to-country.com
Volledig CSV bestand kan je hier gratis downloaden
Daarmee kan je ip adressen vergelijken tegen landen.
Querie die ik zelf heb geprobeerd, in meerdere variaties:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| DELETE FROM gb01_guestbook WHERE gb01_guestbook.id IN #- List 1 - all rows that have duplicates (SELECT gb01.id FROM gb01_countries AS gb01 WHERE Exists (SELECT ip_range_from, ip_range_to, Count(id) FROM gb01_guestbook WHERE gb01_guestbook.ip_range_from = gb01.ip_range_from AND gb01_guestbook.ip_range_to = gb01.ip_range_to GROUP BY gb01_guestbook.ip_range_from, gb01_guestbook.ip_range_to HAVING Count(gb01_guestbook.id) > 1)) AND gb01_guestbook.id NOT IN #- List 2 - one row from each set of duplicate (SELECT Min(id) FROM gb01_countries AS gb01 WHERE Exists (SELECT Field1, Field2, Count(id) FROM gb01_countries WHERE gb01_countries.ip_range_from = gb01.ip_range_from AND gb01_countries.ip_range_to = gb01.ip_range_to GROUP BY gb01_countries.ip_range_to, gb01_countries.ip_range_to HAVING Count(gb01_countries.id) > 1) GROUP BY ip_range_from, ip_range_to); |