Avatar billede jaws Nybegynder
31. januar 2002 - 18:58 Der er 5 kommentarer og
1 løsning

INSERT specifikke records fra een tabel til en anden tabels felter???

Hi,
Jeg har en tabel der indeholder en bunke af firmaer, men informationerne om hvert enkelt firma er listet på hver sin række istedet for i hvert sit felt.

ROW FIELD1  FIELD2
==============================================
1 Company name:..... ABC Inc.
2 Address-line1:.... Box 5389
3 Address-line2:.... Framilton
4 City:............. Filmingto
5 State:............
6 Zip #:............ 2001
7 Country:.......... New zealand
8
9 Website:.........  www.domain.com
10 Att. person:...... Sejko Matter
11 E-mail:........... sejko@domain.com
12
13
14
15
16
17 Company name:..... Happy Inc.
18 Address-line1:.... Dos de Jayo, 5
19 Address-line2:....
20 City:............. L´Eliana
21 State:............
22 Zip #:............ 4623
23 Country:.......... Spain
24
25 Website:.........  www.happy.com
26 Att. person:...... Ignice Ventum
27 E-mail:........... ignice@happy.com
... ...    ...
... ...    ...

Hvert firma "område" indeholder det samme antal linier information om det pågældende firma, så der kan sagtens refereres til hver unik information ved at lægge et antal linier til den linie hvor f.eks. firmanavnet er fundet.
Dvs. hvis f.eks. "Happy Inc." skal indsættes i min anden tabel VED jeg at adresse informationer findes på række nr. 18(+1) og 19(+2), by på 20(+3), stat på 21(+4), postnr 22(+5) etc...

Men hvordan laver jeg en INSERT til min anden tabel so hver firma information (adresse,stat,by etc) indsættes på den rigtige plads?

Jeg håber I kan hjælpe mig:)

/Jaws
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 19:00 #1
Ikke med SQL - skriv et script i fx PHP el. Perl til at håndtere det.
Avatar billede jaws Nybegynder
31. januar 2002 - 19:05 #2
Hvis det ikke kan ses på ovenstående opsætning af indholdet i min tabel, består den af 3 felter:
ROW (1,2,3,4 etc.)
FIELD1 (fx. "Company name:.....","Address-line1:....")
FIELD2 (fx. "ABC Inc.","Happy Inc.")

Min anden tabel, der skal indsættes i, ser ud som nedenstående:

**CUSTOMERS**
company
address1
address2
city
state
zip
country
website
contact_name
contact_email
Avatar billede jaws Nybegynder
06. februar 2002 - 15:15 #3
Tro det eller ej, men det lykkedes mig faktisk at udføre det hele i 1 statement:

INSERT INTO demo
    (company, address1, address2, city, state, zip, country,
    website, contact_name, contact_email) (SELECT a.Felt2 AS CompanyName,
                                        b.Felt2 AS Address1,
                                        c.Felt2 AS Address2,
                                        d.Felt2 AS City,
                                        e.Felt2 AS State,
                                        f.Felt2 AS Zip,
                                        g.Felt2 AS Country,
                                        h.Felt2 AS Website,
                                        i.Felt2 AS Contact_name,
                                        j.Felt2 AS Contact_email
                                    FROM (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                              = 1)
                                        a INNER JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 2) b ON
                                        b.row = a.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 3) c ON
                                        c.row = b.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 4) d ON
                                        d.row = c.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 5) e ON
                                        e.row = d.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 6) f ON
                                        f.row = e.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 7) g ON
                                        g.row = f.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 8) h ON
                                        h.row = g.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 9) i ON
                                        i.row = h.row + 1 INNER
                                        JOIN
                                            (SELECT row,
                                              Felt2
                                          FROM Demo6
                                          WHERE row % 10
                                                = 0) j ON
                                        j.row = i.row + 1)
Avatar billede jaws Nybegynder
06. februar 2002 - 15:51 #4
Lidt forklaring til scriptet er følgende:

"row % 10 = 2" er lig med nr. 2 række i hver "bunke" af 10 rækker. På denne måde looper jeg gennem hele tabellen og trækker firma oplysningerne ud 1 for 1, 10 rækker ad gangen.

Dvs. jeg ryddede lidt ud i tabellen først ved at fjerne alle NULL records så hvert firma område består af 10 rækker.
Avatar billede erikjacobsen Ekspert
06. februar 2002 - 17:21 #5
...men havde det ikke været nemmere med et lille script i PHP
:)  - men i sandhed imponerende!
Avatar billede jaws Nybegynder
06. februar 2002 - 18:59 #6
tjo, det havde sikkert været en smule nemmere at klare det med lidt scripting enten som PHP, ASP eller WSH. Men når der nu findes et så dejligt sprog som SQL der kan klare ærterne ser det jo lidt mere "lækkert" ud at holde det i SQL:)

...så slipper jeg også for at have en bunke scripts rodende rundt som henh. SQL og PHP;-)
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