Pregunta:
Fecha: 08-10-2015 11:32:08
(En Español)
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
Desde ya cualquier colaboracion, sera bien recibida
Muchas gracias
Daniel Votos: 0 - Respuestas: 9 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
INSERTAR VARIOS REGISTROS DE UNA TABLA A OTRA[Resuelta]
Gente de PHPBuenas 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 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
