[MySQL] row kopieeren binnen dezelfde tabel

Pagina: 1
Acties:
  • 54 views sinds 30-01-2008

  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 12-02 12:36
Ik ben op zoek naar een query waarmee je een row binnen dezelfde tabel kan dupliceren, alleen het ID moet uiteraard worden opgehoogd bij de kopie.Uiteraard kan ik eerst alles gaan uitlezen, en vervolgens van die informatie een nieuwe INSERT query maken, maar ik wil eigenlijk een universele manier om binnen 1 query deze handeling te doen.

Ik heb google en dit forum al behoorlijk afgestruind, maar ben weinig nuttigs tegengekomen.

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

dit had je kunnen oplossen met google!

Going for adventure, lots of sun and a convertible! | GMT-8


  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 12-02 12:36
het kan aan mij liggen, maar volgens mij gaat dat artikel ergens anders over

maargoed ik heb dit geprobeerd naar aanleiding van dat artikel, maar het wil niet werken

INSERT INTO tabel(id) SELECT ON DUPLICATE KEY tabel.id = 126

[ Voor 51% gewijzigd door plakbandrol op 02-07-2006 16:45 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

SQL:
1
2
3
4
INSERT Tabel (veld1, veld2, veld3)
SELECT veld1, veld2, veld3
FROM Tabel
WHERE id = @id
:?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 12-02 12:36
kenneth schreef op zondag 02 juli 2006 @ 16:44:
SQL:
1
2
3
4
INSERT Tabel (veld1, veld2, veld3)
SELECT veld1, veld2, veld3
FROM Tabel
WHERE id = @id
:?
Ah dat werkt wel, maar is er een manier om niet alle veldnamen handmatig te hoeven invoeren? Ik heb er een stuk of 40 in die tabel, en zo wordt het een beetje lastig te onderhouden

maar bedankt alvast, hiermee kan ik in ieder geval vooruit :>

  • Tomatoman
  • Registratie: November 2000
  • Nu online

Tomatoman

Fulltime prutser

plakbandrol schreef op zondag 02 juli 2006 @ 16:48:
[...]

Ah dat werkt wel, maar is er een manier om niet alle veldnamen handmatig te hoeven invoeren? Ik heb er een stuk of 40 in die tabel, en zo wordt het een beetje lastig te onderhouden
Een tabel met een stuk of 40 velden is per definitie lastig te onderhouden. Tijd om eens naar je datamodel te kijken. :)

Een goede grap mag vrienden kosten.


  • JaQ
  • Registratie: Juni 2001
  • Nu online

JaQ

plakbandrol schreef op zondag 02 juli 2006 @ 16:48:
[...]

Ah dat werkt wel, maar is er een manier om niet alle veldnamen handmatig te hoeven invoeren? Ik heb er een stuk of 40 in die tabel, en zo wordt het een beetje lastig te onderhouden

maar bedankt alvast, hiermee kan ik in ieder geval vooruit :>
code:
1
2
3
4
5
insert 
into table
( select *
    from table
   where id = :id )

:?

Egoist: A person of low taste, more interested in themselves than in me


  • plakbandrol
  • Registratie: Juni 2002
  • Laatst online: 12-02 12:36
tomatoman schreef op zondag 02 juli 2006 @ 17:45:
[...]
Een tabel met een stuk of 40 velden is per definitie lastig te onderhouden. Tijd om eens naar je datamodel te kijken. :)
elke tabel bevat een eigen soort informatie, het lijkt me niet logisch het op te splitsen in allerlei losse tabellen :)

maar dat terzijde..

  • ijsthijs
  • Registratie: Juni 2003
  • Laatst online: 18-01 03:13
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
function copy_row($primary_key,$originitating_table,$originitating_field_key,$originitating_field_value,$change_field_key,$change_field_value) {
        
            $query = mysql_query("SELECT * FROM ".$originitating_table." WHERE ".$originitating_field_key." = '".$originitating_field_value."'");
            
            while($insert_info = mysql_fetch_assoc($query)) {
            
                // $return .= "<pre>"; $return .= print_r(array_keys($insert_info),1);  $return .= "</pre>";
            
                // haal eerst field_key uit de array
                $original_field_keys = array_keys($insert_info);
                $insert_columns = implode(",",$original_field_keys);
                
                foreach($original_field_keys as $value=>$key) {
                    if($key == $primary_key) {
                        $to_insert[] = "''";
                    } elseif($key == $change_field_key) {
                        $to_insert[] = "'".$change_field_value."'";
                    } elseif($key !== $originitating_field_key) {
                        $to_insert[] = "'".addslashes($insert_info[$key])."'";
                    }  else {
                        $to_insert[] = "''";
                    }
                    
                }
                $insert_values = implode(",",$to_insert);
                    
                mysql_query("INSERT INTO ".$originitating_table." (".$insert_columns.") VALUES(".$insert_values.")") or die(mysql_error());
                unset($original_field_keys,$insert_columns,$insert_values,$to_insert);
            }
            
            return $return;
        }
?>


Een omweg, maar wel effectief.

Gebruik:
copy_row('primary_key',"tabelnaam","welke_kolom",$col_value,"","");

[ Voor 14% gewijzigd door ijsthijs op 03-07-2006 14:36 ]

eenechtezzper.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Dit is best basic; gewoon logisch nadenken en desnoods eens even googlen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.