Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duplicar registros

Estas en el tema de Duplicar registros en el foro de PHP en Foros del Web. Buenas, estoy intentando duplicar un registro con PHP, aumentando el id, el problema es que me añade 2 registros en vez de uno. Que hago ...
  #1 (permalink)  
Antiguo 25/03/2023, 14:24
 
Fecha de Ingreso: enero-2008
Ubicación: Valencia
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Duplicar registros

Buenas, estoy intentando duplicar un registro con PHP, aumentando el id, el problema es que me añade 2 registros en vez de uno.
Que hago mal?

Código:
<?php
            include 'dbconfig.php';
            $conn = mysqli_connect($servername, $username, $password, $database);
            $conn->set_charset('utf8');
            if (!$conn) {
                  die("Connection failed: " . mysqli_connect_error());
            }
             
            echo "Conectado";
            require_once 'dbconfig.php';
            $query = "SELECT MAX(id) FROM agenda2024";
            $result = mysqli_query($conn,  $query);
            $row = mysqli_fetch_row($result);
            echo $row[0];           
            

            $sql = "INSERT INTO agenda2024 (id, fecha, time_ini, time_fin, total_time, empresa, poblacion, direccion, obra, vehiculo, complemento , comentario , tipo)
            SELECT  $row[0] + 1,fecha, time_ini, time_fin, total_time, empresa, poblacion, direccion, obra, vehiculo, complemento , comentario , tipo
            FROM agenda2024
            WHERE id = 2";              

            if (mysqli_query($conn, $sql)) {
                  
                  echo "Nuevo registro añadido";
            } else {
                  echo "Error: " . $sql . "<br>" . mysqli_error($conn);
            }
            mysqli_close($conn);
            
?>
O bien el problema esta en la base de datos?
  #2 (permalink)  
Antiguo 04/04/2023, 12:55
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duplicar registros

Se puede hacer con una sola consulta:
Código SQL:
Ver original
  1. INSERT INTO mi_tabla
  2. SELECT MAX(id)+1, campo1, campo2, campo3, ...
  3. FROM mi_tabla
  4. WHERE id = {id_del_registro_a_duplicar}
__________________
Mi web de programación en PHP en construcción, claro. Un dia de esos pongo algo.
  #3 (permalink)  
Antiguo 08/04/2023, 03:37
 
Fecha de Ingreso: enero-2008
Ubicación: Valencia
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Duplicar registros

Cita:
Iniciado por danicasas Ver Mensaje
Se puede hacer con una sola consulta:
Código SQL:
Ver original
  1. INSERT INTO mi_tabla
  2. SELECT MAX(id)+1, campo1, campo2, campo3, ...
  3. FROM mi_tabla
  4. WHERE id = {id_del_registro_a_duplicar}
Perfecto, pero , si el registro ya existe, ¿Cómo puede saltar al siguiente?
Supongamos que estoy duplicando el registro 2

Código HTML:
WHERE id = 2";
y tengo 500 registros, ¿Cómo lo hago para que el duplicado sea el 501?
  #4 (permalink)  
Antiguo 12/04/2023, 16:05
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duplicar registros

ChatGPT es una pasada. Le pedí comentar el código:

Código SQL:
Ver original
  1. INSERT INTO mi_tabla
  2. SELECT MAX(id)+1, campo1, campo2, campo3, ...
  3. FROM mi_tabla
  4. WHERE id =2
Espero que se enienda:
Código text:
Ver original
  1. Este código SQL tiene como objetivo insertar una nueva fila en la tabla "mi_tabla" con valores específicos en cada columna, basados en los valores de una fila existente en la misma tabla.
  2.  
  3. Aquí está la explicación de cada parte del código:
  4.  
  5.     "INSERT INTO mi_tabla" indica que se desea insertar datos en la tabla "mi_tabla".
  6.  
  7.     "SELECT MAX(id)+1, campo1, campo2, campo3, ..." especifica qué valores se deben insertar en cada columna de la nueva fila. La expresión "MAX(id)+1" indica que el valor del campo "id" de la nueva fila será el valor máximo actual de la columna "id" de la tabla más 1. Los valores de los otros campos (campo1, campo2, campo3, etc.) se especifican en la misma consulta.
  8.  
  9.     "FROM mi_tabla" indica que los valores para la nueva fila se tomarán de la tabla "mi_tabla".
  10.  
  11.     "WHERE id =2" es una cláusula opcional que filtra la fila de la tabla "mi_tabla" que se usará como base para los valores de la nueva fila. En este caso, solo se seleccionará la fila que tenga un valor de "id" igual a 2.
  12.  
  13. En resumen, este código SQL insertará una nueva fila en la tabla "mi_tabla" con un valor de "id" único (el valor máximo actual de la columna "id" más 1) y otros valores específicos para cada columna, basados en la fila existente con un valor de "id" igual a 2 en la misma tabla.
__________________
Mi web de programación en PHP en construcción, claro. Un dia de esos pongo algo.
  #5 (permalink)  
Antiguo 12/04/2023, 16:08
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duplicar registros

ChatGPT es una pasada. Le pedí comentar el código:

Código SQL:
Ver original
  1. INSERT INTO mi_tabla
  2. SELECT MAX(id)+1, campo1, campo2, campo3, ...
  3. FROM mi_tabla
  4. WHERE id =2
Espero que se enienda:
Código text:
Ver original
  1. Este código SQL tiene como objetivo insertar una nueva fila en la tabla "mi_tabla" con valores específicos en cada columna, basados en los valores de una fila existente en la misma tabla.
  2.  
  3. Aquí está la explicación de cada parte del código:
  4.  
  5.     "INSERT INTO mi_tabla" indica que se desea insertar datos en la tabla "mi_tabla".
  6.  
  7.     "SELECT MAX(id)+1, campo1, campo2, campo3, ..." especifica qué valores se deben insertar en cada columna de la nueva fila. La expresión "MAX(id)+1" indica que el valor del campo "id" de la nueva fila será el valor máximo actual de la columna "id" de la tabla más 1. Los valores de los otros campos (campo1, campo2, campo3, etc.) se especifican en la misma consulta.
  8.  
  9.     "FROM mi_tabla" indica que los valores para la nueva fila se tomarán de la tabla "mi_tabla".
  10.  
  11.     "WHERE id =2" es una cláusula opcional que filtra la fila de la tabla "mi_tabla" que se usará como base para los valores de la nueva fila. En este caso, solo se seleccionará la fila que tenga un valor de "id" igual a 2.
  12.  
  13. En resumen, este código SQL insertará una nueva fila en la tabla "mi_tabla" con un valor de "id" único (el valor máximo actual de la columna "id" más 1) y otros valores específicos para cada columna, basados en la fila existente con un valor de "id" igual a 2 en la misma tabla.
__________________
Mi web de programación en PHP en construcción, claro. Un dia de esos pongo algo.
  #6 (permalink)  
Antiguo 16/04/2023, 01:34
 
Fecha de Ingreso: enero-2008
Ubicación: Valencia
Mensajes: 65
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Duplicar registros

Gracias por tu respuesta, pero me dice que el registro es PRIMARY KEY y no se puede duplicar, la solución que he encontrado es la siguiente

Código PHP:
$id $_POST['id'];
            
            
$query "SELECT MAX(id) FROM agenda2024";
            
$result mysqli_query($conn,  $query);
            
$row mysqli_fetch_row($result);

            
$sql "INSERT INTO agenda2023 (id, fecha, time_ini, time_fin, total_time, empresa, poblacion, direccion, obra, vehiculo, complemento , comentario , tipo)
            SELECT $row[0]+1, fecha, time_ini, time_fin, total_time, empresa, poblacion, direccion, obra, vehiculo, complemento , comentario , tipo
            FROM agenda2023
            WHERE id = $id"


Etiquetas: duplicar, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:04.