Avatar billede problemer Nybegynder
26. januar 2002 - 16:42 Der er 5 kommentarer og
1 løsning

Indsæt fra anden tabel + en ekstra kolonne

Hejsa
Mit site er i php, derfor denne kategori.
Jeg skal indsætte nogle data i en mysql tabel som jeg henter fra en anden tabel.
De to tabeller er identiske bortset fra at tabel_1 indeholder en ekstra kolonne som ikke findes i tabel_2
Jeg plejer at gøre sådan her:
  INSERT INTO tabel_1 SELECT * FROM tabel_2

Nu indeholder tabel_1 imidlertid én kolonne mere end tabel 2 hvorfor jeg får følgende fejlmeddelelse:
  "Column count doesn't match value count at row 1"

Den ekstra kolonne i tabel_1 skal have en fast værdi, f.eks. "12345", men hvordan indsætter jeg den samtidig med jeg indsætter dataene fra tabel_2 ?

Jeg har prøvet med:
  INSERT INTO tabel_1 SELECT * FROM tabel_2, "12345"
Og:
  INSERT INTO tabel_1 (*) VALUES (SELECT * FROM tabel_2, "12345")

Alternativt kan jeg altid lave en udenomsløsning som først henter og derefter indsætter, men jeg vil helst klare det hele i sql:)

Hvis der er nogle som kan løse problemet vil jeg blive meget glad:)
Avatar billede problemer Nybegynder
26. januar 2002 - 16:54 #1
Ingen hurtige eksperter i dag?
Nå, men så vil jeg benytte følgende nødløsning indtil videre, men jeg vil gerne stadig vide hvordan man rigtigt gør hvis nogen kender svaret:)

    $query = 'SELECT * FROM tabel_2';
    $sql = mysql_query($query) or die (mysql_error());
    while($out = mysql_fetch_assoc($sql)){
        $c = sizeof($out);
        $i=0;
        foreach($out as $key=>$val){
            $i++;
            $cols .= $key;
            $vals .= '"'.$val.'"';
            if($c!=$i){
                $cols .=', ';
                $vals .=', ';
            }
        }
        $query = 'INSERT INTO tabel_1 ('.$cols.', ekstra_kolonne) VALUES ('.$vals.', '.12345.')';
        mysql_query($query) or die (mysql_error());
    }
Avatar billede myplacedk Nybegynder
26. januar 2002 - 21:38 #2
INSERT INTO tabel_1 (kol1, kol2, kol3, ekstra_kolonne) SELECT kol1, kol2, kol3, 1234
Avatar billede barefoot Nybegynder
26. januar 2002 - 21:43 #3
Okay, den vil jeg prøve, selvom jeg har så mange kolonner(ca. 80) det ville være sjovere hvis det kunne foregå automatisk(ville også være rart hvis der en dag blev tilføjet kolonner).
Mange tak:)
Avatar billede barefoot Nybegynder
26. januar 2002 - 21:46 #4
Ups, jeg var vist kommet til at logge ind med en gammel bruger dengang jeg oprettede spørgsmålet.
(ved godt man ikke må have flere - slå mig hvis i vil) *sorry*
Avatar billede myplacedk Nybegynder
26. januar 2002 - 22:29 #5
Det kan lade sig gøre, men jeg ville ikke selv bruge det:

INSERT INTO tabel_1 SELECT *, 1234

Virker kun, hvis den ekstra kolonne er til sidst eller først i tabel_1.
Avatar billede barefoot Nybegynder
26. januar 2002 - 22:34 #6
Okay. Jeg kender kolonnens placering så jeg tror næsten jeg vil gøre sådan.
Det er også kun fordi det er besværligt med den første model når der er 80 kolonner med bruger oplysninger.
Og hvis man tilføjer en kolonne i begge tabeller skal man ændre queryen overalt hvor den bruges, hvilket man slipper for med den jeg selv brugte eller den nyeste du lige viste.
Men der mangler da noget?
Skal der ikke stå:?
  INSERT INTO tabel_1 SELECT * FROM tabel_2, 1234
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

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