Avatar billede phliplip Nybegynder
27. maj 2008 - 12:49 Der er 1 løsning

MySQL: Opret grupper, og opdater felter i rimelig stor DB

Hey,

Jeg har en city db med 2.700.000+ records.

city_id      int(11)      Nej     
city_status      tinyint(3)     Nej      0
city_group_id      int(11)     Nej      0
city_group_sort      int(11)     Nej      0
city_iata_code      char(3)     Nej     
city_name      varchar(255)     Nej     
city_name_plain      varchar(255)     Nej     
city_country_code      char(2)     Nej     
city_state_code      varchar(10)     Nej     
city_latitude      varchar(255)     Nej      0
city_longitude      varchar(255)     Nej      0
city_population      int(11)     Nej      0


Indeks:
Nøglenavn     Datatype     Kardinalitet     Feltnavn
PRIMARY     PRIMARY     2699355      city_id
city_iatacode     INDEX     1      city_iata_code
city_name     INDEX     2699355      city_name
city_country_code     INDEX     230      city_country_code
city_name_plain     INDEX     2699355      city_name_plain
city_status     INDEX     1      city_status
city_latitude     INDEX     245395      city_latitude
city_longitude     INDEX     385622      city_longitude
city_population     INDEX     28414      city_population


Pladsforbrug:
Datatype     Benyttelse
Data     153.693     KB
Indeks     178.483     KB
Total     332.176     KB
          Række-statistik:
Erklæringer     Værdi
Format     dynamisk
Rækker     2.699.355
Rækkelængde ø     58
Rækkestørrelse  ø     126 Bytes
Næste Autoindex     2.699.356
Oprettelse     27/05 2008 kl. 08:49:28
Sidste opdatering     27/05 2008 kl. 08:49:55
Sidste check     27/05 2008 kl. 08:53:21

Nogen byer ligger dobbelt, bare med andre navne - Fx.

København
Copenhagen
og så
Amager

Fælles for de byer er at de har samme geo-cordinater. Jeg vil derfor gruppere dem på dem og for at de informationer og andre fælles ting ikke skal ligge og fylde dobbelt i city tabellen vil jeg lave en city_group tabel der kan indeholde alle sådanne ting.

city_group_id      int(11)      Nej     
city_group_status      tinyint(3)     Nej      0
city_iata_code      char(3)     Nej     
city_country_code      char(2)     Nej     
city_state_code      varchar(255)     Nej     
city_latitude      varchar(255)     Nej     
city_longitude      varchar(255)     Nej     

Og så referere i city tabellen til city_group_id, og sætte city_group_sort efter population således at København, hvilket har en population højere end amager prioriteres højere. Population skal derefter bare skrottes.

Har prøvet at lave nogen PHP scripts der kan udføre denne opgave dog uden noget særligt brugbart.

Bare det at nulstille city tabellen ved at sætte city_group_id=0 og city_group_sort=0 viser sig at være en tidskrævende opgave.

Så jeg belønner alle der kan komme med rigtigt brugbart input til denne problem stilling.
Avatar billede phliplip Nybegynder
04. juni 2008 - 11:58 #1
Nå.. lukker - Fandt ikke ud af noget!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester