22. oktober 2004 - 01:18Der er
21 kommentarer og 2 løsninger
Konvertere gamle data til ny database.
Jeg har fået en ældre database med ca 35.000 poster ind af døren og til min store skræk bruges der godt nok et par reference tabeller, men de bruges med tekst fremfor et id.
f.eks gammel stil :
Kategori indeholder MELO PROM ....
Country indeholder samme smøre usa uk .... ...
De skal ændres til at være en id_reference til kategori_id / country_id fremfor kategori_code eller decideret lande tekst.
I feltet 'users' har jeg gjort det at konvertere alle "brugere" til én tabel for sig selv og users i tabellen 'tekst' (kan godt være den samme flere steder) skal så igen referere til de nye id´er.
Nu skal jeg så have opdateret den nye tabel 'tekst' med de nye data. Hvordan bygger jeg en php/mysql der kan gøre dette. Skal jeg trække hver række ud fra tabel_old og derefter lave en ny sql for at finde bruger_id og derefter en for kategori og country og så til sidst indsætte hele molevitten i den nye tabel?
Countries er nu en samlet liste over alverdens lande - Så jeg skal have konverteret de gamle "tekst" data til id'er. Det samme gælder for users og kategorier som nu også er id'er.
Det betyder at jeg skal lave minimum 5 queries for at indsætte en ny række.
1. hent alle data. 2. Find user og find det nye id 3. Find land og find det nye id 4. Find kategori og find det nye id 5 Smid det hele ind igen
Jeg håbede bare på at der var en lidt nemmere måde. :?)
sandbox - 1,2,3 har jeg gjort. Det er 4 jeg beskriver ovenfor.
nye tabeller ja tak. Jeg skal jo skille tingene af da den database jeg fik ind af døren skal passe ind i et andet system. Der bruges land, bruger_id og kategori flittigt i samme stil.
Hvordan updaten kan gøres smartere har jeg ikke helt styr på.
: Lav en ny tabel for land // er gjort 2: Lav en ny tabel for kategori // er gjort 3: Lav en ny tabel for user // er gjort 4: Saml det hele i en ny tabel. // mangler hjælp til den smarte query for ikke at komme ud i de 5 jeg beskrev tidligere.
Synes godt om
Slettet bruger
22. oktober 2004 - 17:01#9
Under 123 regnede jeg også at fylde dem med data.
4 består så af følgende trin:
a: lav den nye hoved-tabel b: fyld data i med en enkelt query i stil med
INSERT INTO nytabel (user_id, country_id, kategori_id, andre, felter) SELECT u.id, c.id, k.id, g.andre, g.felter FROM gammeltabel AS g, countries AS c, users AS u, kategorier AS k
WHERE g.country=c.navn AND g.user=u.navn AND g.kategori=k.navn
Synes godt om
Slettet bruger
22. oktober 2004 - 17:04#10
Og grunden til at jeg ikke bare UPDATEer den gamle tabel er, at UPDATE først understøtter flere tabeller fra MySQL 4.0.4, og jeg synes egentlig det er bedre at holde dem adskilt.
Det behøver ikke være lige nu. (det er jo tidligt og folk skal hvad de nu skal om morgenen) Det irriterer mig bare. Løsningen er sikkert såre simpel.
Jeg har to søgninger :
SELECT a.product_id,a.product_title,a.product_isbn,a.product_band,a.product_category,a.product_year,DATE_FORMAT(a.product_created, '%d/%m/%Y - %H:%i') AS date,b.band_id,b.band_name FROM products AS a,bands AS b WHERE a.product_title LIKE '%test%' AND b.band_id = a.product_band ORDER BY a.product_title ASC LIMIT 0,200
SELECT a.product_id,a.product_title,a.product_isbn,a.product_band,a.product_category,a.product_year,DATE_FORMAT(a.product_created, '%d/%m/%Y - %H:%i') AS date,b.band_id,b.band_name FROM products AS a,bands AS b WHERE b.band_name LIKE '%test%' AND b.band_id = a.product_band ORDER BY b.band_name ASC LIMIT 0,200
Den ene søger i product tabellen og hiver navn og kunster ud. Fint det virker.
Den anden skal så søge den anden vej rundt. Altså søgning på kunster (som er unik) men så kun give mig én af hver og ikke som nu hvor jeg får listet samme kunstner hvis der er flere produkter med denne.
Tænk over det ellers opretter jeg et nyt spørgsmål hvis det bliver for indviklet.
Synes godt om
Slettet bruger
29. oktober 2004 - 07:01#18
Den skal vel stadig give alle de produkter, som hører til den specifikke kunstner? Eller er du bare interesseret i en liste over kunstnere, som passer på søgningen og som har produkter tilknyttet?
Det virker som dit første bud. Altså jeg får en liste, men med alle produkter. Jeg skal have en liste med kunstnere, men kun ét produkt ligegyldigt hvor mange der så end må være.
Synes godt om
Slettet bruger
29. oktober 2004 - 07:14#22
Du kan prøve med
GROUP BY b.band_name lige før ORDER BY
(Og det var egentlig mit andet bud, men det er det, der passer på beskrivelsen af, hvad du ønsker.)
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.