Nueva pregunta

Pregunta:

Fecha: 08-10-2015 11:32:08 (En Español)

INSERTAR VARIOS REGISTROS DE UNA TABLA A OTRA[Resuelta]

Gente de PHP
Buenas tardes
Tengo la siguiente pregunta:
Estoy intentando pasar registros de una tabla "A" a una tabla "B" por medio de PHP, hice el siguiente sript, pero solo logro pasar el ultimo registro solamente.

Alguien me puede ayudar con el ERROR que tengo

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

	<title>xx COPY</title>
    <link rel="stylesheet" href="">	
</head>
<?php  
require('funciones/conexion.php');

	$sql = "SELECT id_cliente, cliente, nombre 
			FROM clientes";

	$result = $mysqli->query($sql);                  

	if ($result) {
			
	while($row = $result->fetch_assoc()) {	

	$apellido=$row['cliente'];
	$nombre=$row['nombre'];

	echo $apellido ."<br>";
}
}
$contador = count($row["id_cliente"]);				

if ($contador > 0) {               //Si tengo 1 registro o mas
for ($i=0; $i<$contador; $i++) {  // Hago un FOR cuento todos los registros de la consulta
$apellido = $row["cliente"];
$nombre = $row["nombre"];

//Inserto los registros en otra tabla

}}
$insercion="insert into cale (apellido, nombre) values ('$apellido', '$nombre')";

if ($mysqli->query($insercion)) {
    echo "Se creo una nueva carga";
} else {
    echo "Error: " . $insercion . "<br>" . mysqli_error($mysqli);
}

mysqli_close($mysqli);

?>



Desde ya cualquier colaboracion, sera bien recibida
Muchas gracias
Daniel
Etiquetas: MySQL - PHP - PHP MySQLi - Pregunta - Query - SQL Votos: 0 - Respuestas: 9 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 08-10-2015 14:05:01 Hola Daniel, me parece que tenes un problema en la línea 27:

    $contador = count($row["id_cliente"]);


    en $row["id_cliente"] imagino que tenes un id, siempre que le hagas un count() te va a dar 1.

    Saludos,
      Votos: 1 - Link respuesta
     
  • Fecha: 08-10-2015 15:13:05 Fernando

    Gracias por tu respuesta.
    Hice la prueba que me indicaste y no obtube el resultado esperado.

    $contador = count($id_cliente);
    // SI PONGO $contador = count($id_cliente); el Rdo = 1, INGRESA UN REGISTRO CON NINGUN DATO
    // SI PONGO $contador = count($row["id_cliente"]); el Rdo = 0, INGRESA EL ULTIMO REGISTRO COMPLETO

    <?php  
    require('funciones/conexion.php');
    
    	$sql = "SELECT id_cliente, cliente, nombre 
    			FROM clientes
                ";
    
    	$result = $mysqli->query($sql);                   ///----> Creo una variable $result que digo que es = a mi conexion a BD para que ejecute el query que esta en $sql 
    
    	if ($result) {
    	// output data of each row
    		
    	while($row = $result->fetch_assoc()) {	
        
        $id_cliente = $row["id_cliente"];
    	$apellido=$row['cliente'];
    	$nombre=$row['nombre'];
    
    	echo $id_cliente.''. $apellido.''. $nombre ."<br>";
    }
    }
    
    $contador = count($id_cliente);
    // SI PONGO $contador = count($id_cliente); el Rdo = 1, INGRESA UN REGISTRO CON NINGUN DATO 
    // SI PONGO $contador = count($row["id_cliente"]); el Rdo = 0, INGRESA EL ULTIMO REGISTRO COMPLETO 	
    
    if ($contador > 0) {               //Si tengo 1 registro o mas
    for ($i=0; $i<$contador; $i++) {  // Hago un FOR cuento todos los registros de la consulta
    }
    
    $id_cliente = $row["id_cliente"];
    $apellido = $row["cliente"];
    $nombre = $row["nombre"];
    
    
    //Inserto los registros en otra tabla
     
    }	echo $contador ."<br>";
    	
    $insercion="insert into cale (apellido, nombre) values ('$apellido', '$nombre')";
    


    ¿ Se te ocurre otra cosa que pueda ser ? ... yo no le encuentro la vuelta

    Un saludo
    Gracias nuevamente
    Daniel
      Votos: 0 - Link respuesta
     
  • Fecha: 08-10-2015 16:10:58 Daniel, lo que mencionaba es que esa línea no tiene mucho sentido, porque no está contando nada, no se para que la usas, ¿este código es tuyo o le estas dando mantenimiento?   Votos: 2 - Link respuesta
     
  • Fecha: 08-10-2015 18:36:14 Hola Daniel mira puedes usar
    $contador = $mysqli_result->num_rows;
    

    Lo que hace es mostrar el número de resultados que hay aunque hay miles de formas de hacer eso.
    Una sugerencia es usar el contador como opción de un WHERE
    Y haces el INSERT
    $contador = $mysqli_result->num_rows;
    if ($contador > 0) {               //Si tengo 1 registro o mas
    for ($i=0; $i<$contador; $i++) {  // Hago un FOR cuento todos los registros de la consulta
    #pones la consulta con un WHERE igual a $i
    # y después el INSERT con los resultados de la consulta del WHERE.
    }}
    
      Votos: 1 - Link respuesta
     
  • Fecha: 08-10-2015 19:11:36 Fernando / Edison
    Ante todo gracias por sus respuetas

    1.- Fernando: La ideas es ingresar varios registros de una tabla en otra, entiendo que de esta forma me recupera todos los registros que estan en la tabla A y me los inserta en la B.
    2.- Edison: Probe la solucion que me diste y obtuve el mismo resultado, solo me ingresa el Ultimo registros de los 3 que extisten en la tabla
    Por ahi no he diseñado convenientemente el script ... la verdad no le encuentro la solucion, pero entiendo que aqui todo es posible y la misma esta en algun lugar ... esto es lo que me apasiona de programar ...
    Gracia a ambos
    Si saben de alguna solucion, estare atento como siempre
    Un saludo
    Gracias nuevamente
    Daniel
      Votos: 1 - Link respuesta
     
  • Fecha: 09-10-2015 04:37:25 Daniel, podrías invocar la acción desde PHP pero hacer el pase de registros en la base de datos (va a ser mucho más performante) por medio de un INSERT INTO SELECT (insertar en base a un select)

    Por ejemplo:
    INSERT INTO `tabla_b` (`col_b_1`,`col_b_2`,`col_b_3`) SELECT col_a_1, col_a_2, col_a_3 FROM tabla_a;


    Espero que esto te sea de ayuda.

    Saludos,
      Votos: 2 - Link respuesta
     
  • Fecha: 09-10-2015 04:44:25 Hola otra forma que he visto pero nunca lo he usado es así
    INSERT INTO tabla2 SELECT * FROMA tabla1;
    

    Ya se porque no te da es porque el INSERT debe ir dentro del WHILE
    $sql = "SELECT id_cliente, cliente, nombre 
                FROM clientes
                ";
        $result = $mysqli->query($sql);                   ///----> Creo una variable $result que digo que es = a mi conexion a BD para que ejecute el query que esta en $sql 
        if ($result) {
        // output data of each row
            
        while($row = $result->fetch_assoc()) {    
        
        $id_cliente = $row["id_cliente"];
        $apellido=$row['cliente'];
        $nombre=$row['nombre'];
        echo $id_cliente.''. $apellido.''. $nombre ."<br>;
        $insercion="insert into cale (apellido, nombre) values ('$apellido', '$nombre')";
    }
    }
    


    El resto sobra XD no había visto bien o poniendo el contador y el FOR dentro de él WHILE pero no hace falta.

    Salu2 de tu amigo ElCapa8
      Votos: 0 - Link respuesta
     
  • Fecha: 09-10-2015 04:53:41 Buenas gente

    Simplifique el script y el resultado es el mismo, me inserta en la tabla B el ultimo registro de la tabla A
    TABLA A
    id_cliente Nombre Apellido
    1 Juan Perez
    2 Luis Gonzalez
    3 Raul Gomez

    TABLA B
    id_tabla b Nombre Apellido

    1 Raul Gomez

    Lo que me parece es que deberia recibir un ['algo'] que tenga todos los nombres por ejemplo

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    
    	<title>xx COPY</title>
        <link rel="stylesheet" href="">	
    </head>
    <?php  
    require('funciones/conexion.php');
    
    	$sql = "SELECT id_cliente, cliente, nombre 
    			FROM clientes
                ";
    
    	$result = $mysqli->query($sql);                   ///----> Creo una variable $result que digo que es = a mi conexion a BD para que ejecute el query que esta en $sql 
    
    	if ($result) {
    	// output data of each row
    		
    	while($row = $result->fetch_assoc()) {	
        
        $id_cliente = $row["id_cliente"];
    	$apellido=$row['cliente'];
    	$nombre=$row['nombre'];
    
    	echo $id_cliente.''. $apellido.''. $nombre ."<br>";
    }
    }
    
    //Inserto los registros en otra tabla
     
    $insercion="insert into cale (apellido, nombre) values ('$apellido', '$nombre')";
    
    
    if ($mysqli->query($insercion)) {
        echo "Se creo una nueva carga";
    } else {
        echo "Error: " . $insercion . "<br>" . mysqli_error($mysqli);
    }
    
    mysqli_close($mysqli);
    
    ?>
    
      Votos: 1 - Link respuesta
     
  • Fecha: 09-10-2015 05:29:00 Fernando / Edison:
    Agradezco vuestra colaboracion.
    Probe ambas soluciones y la que funciono correctamente es la de Fernando

    INSERT INTO `tabla_b` (`col_b_1`,`col_b_2`,`col_b_3`) SELECT col_a_1, col_a_2, col_a_3 FROM tabla_a;
    


    Dejo el script por si alguien tiene la misma inquitud que yo y pueda resolverlo

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    
    	<title>xx COPY</title>
        <link rel="stylesheet" href="">	
    </head>
    <?php  
    require('funciones/conexion.php');
    
    	$sql = "SELECT id_cliente, apellido, nombre 
    			FROM clientes
                ";
    
    	$result = $mysqli->query($sql);                   ///----> Creo una variable $result que digo que es = a mi conexion a BD para que ejecute el query que esta en $sql 
    
    	if ($result) {
    	// output data of each row
    		
    	while($row = $result->fetch_assoc()) {	
        
        $id_cliente = $row["id_cliente"];
    	$apellido=$row['apellido'];
    	$nombre=$row['nombre'];
    
    	echo $id_cliente.''. $apellido.''. $nombre ."<br>";
    }
    }
    
    //Inserto los registros en otra tabla
    $insercion="INSERT INTO cale (apellido, nombre) SELECT apellido, nombre FROM cli";
     
    /*$insercion="insert into cale (apellido, nombre) values ('$apellido', '$nombre')";*/
    
    
    if ($mysqli->query($insercion)) {
        echo "Se creo una nueva carga";
    } else {
        echo "Error: " . $insercion . "<br>" . mysqli_error($mysqli);
    }
    
    mysqli_close($mysqli);
    
    ?>
    
    

    Paso a dar la pregunta como resuelta.
    Muchas Gracias a ambos
    Les envio un cordial saludo
    Daniel
      Votos: 2 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com