Foros del Web » Programando para Internet » PHP »

Insertar varios registros con datos provenientes de un Select previo.

Estas en el tema de Insertar varios registros con datos provenientes de un Select previo. en el foro de PHP en Foros del Web. Buenas noches, amigos forosdelwebweros. Espero me ayuden con mi primer post. Estoy algo urgido por resolver este problemita. Estoy tratando de insertar el resultado de ...
  #1 (permalink)  
Antiguo 07/06/2010, 20:05
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 7 años, 5 meses
Puntos: 0
Insertar varios registros con datos provenientes de un Select previo.

Buenas noches, amigos forosdelwebweros.

Espero me ayuden con mi primer post. Estoy algo urgido por resolver este problemita. Estoy tratando de insertar el resultado de un "Select *" dentro de la misma tabla de donde proviene dicho Select. Hasta la selección de registros todo está bien, pero cuando intento insertar los registros resultantes, sólo logra hacerlo con uno de los registros. Supongo que debo utilizar alguna estructura de ciclo para lograr el resultado deseado, o quizá el uso combinado de ciclos con arreglos, pero estoy entre dos aguas y no logro concretar la lógica del algoritmo.
Espero puedan ayudarme y definir donde tengo el error en el código, y cómo puedo crear las estructuras necesarias para lograr insertar todos los registros de una sola vez. De antemano, muchas gracias a todos lo que puedan colaborarme.
A continuación el código.

<?
include("conexion.php");

$query="SELECT * FROM banners WHERE banners_sitio = 'M1' AND status = 'E7' AND (banners_ubicacion = 'P1' OR banners_ubicacion = 'P2' OR banners_ubicacion = 'P3' OR banners_ubicacion = 'P5') AND banners_group = 'TP1'";
$result = mysql_query($query,$db) or die ("problema con cadena de conexion<br><b>" . mysql_error()."</b>");

while($row=mysql_fetch_array($result))
{
$clientes_id = $row['banners_clientes_id'];
$vendedores_cod = $row['banners_vendedores_cod'];
$categorias_cod = $row['banners_categorias_cod'];
$title = $row['banners_title'];
$url = $row['banners_url'];
$image = $row['banners_image'];
$imagenclasif = $row['banners_imagenclasif'];
$group = $row['banners_group'];
$html_text = $row['banners_html_text'];
$ubicacion = $row['banners_ubicacion'];
$posicion = $row['banners_posicion'];
$tipoimagen_cod = $row['banners_tipoimagen_cod'];
$expires_impressions = $row['expires_impressions'];
$expires_date = $row['expires_date'];
$date_scheduled = $row['date_scheduled'];
$date_added = $row['date_added'];
$date_status_change = $row['date_status_change'];
$status = $row['status'];

$query = "INSERT into banners (banners_clientes_id, banners_vendedores_cod, banners_categorias_cod, banners_title, banners_url, banners_image, banners_imagenclasif, banners_group, banners_html_text, banners_sitio, banners_ubicacion, banners_posicion, banners_tipoimagen_cod, expires_impressions, expires_date, date_scheduled, date_added, date_status_change, status) Values ('$clientes_id', '$vendedores_cod', '$categorias_cod', '$title', '$url', '$image', '$imagenclasif', '$group', '$html_text', 'M3', '$ubicacion', '$posicion', '$tipoimagen_cod', '$expires_impressions', '$expires_date', '$date_scheduled', '$date_added', '$date_status_change', '$status')";


NOTA: HASTA ACÁ SOLO INSERTA UN REGISTRO, DE TODOS LOS CONSEGUIDOS POR EL SELECT.


Y DESDE ACÁ HACIA ABAJO FUNCIONA PERFECTAMENTE, ES DECIR, ME HACE EL echo DE TODOS LOS REGISTROS QUE ENCONTRÓ EL SELECT PREVIO.

echo "<br> Id de Cliente:", $row['banners_clientes_id'];
echo "<br> Cod. del Vendedor:", $row['banners_vendedores_cod'];
echo "<br> Categoría donde se Publica:", $row['banners_categorias_cod'];
echo "<br> Titulo del Promo:", $row['banners_title'];
echo "<br> URL de la Imagen:", $row['banners_url'];
echo "<br> Ruta de la Imagen Banner:", $row['banners_image'];
echo "<br> Ruta de la Imagen Clasificados:", $row['banners_imagenclasif'];
echo "<br> Tipo de Publicidad:", $row['banners_group'];
echo "<br> Texto del Promo:", $row['banners_html_text'];
echo "<br> Sitio o Mall de la Promo:", $row['banners_sitio'].' Insertado en M3';
echo "<br> Página donde Pauta:", $row['banners_ubicacion'];
echo "<br> Ubicación de Página:", $row['banners_posicion'];
echo "<br> Tipo de Imagen:", $row['banners_tipoimagen_cod'];
echo "<br> Cantidad de Impresiones Pautadas:", $row['expires_impressions'];
echo "<br> Fecha de Expiración:", $row['expires_date'];
echo "<br> Fecha Pautada:", $row['date_scheduled'];
echo "<br> Fecha de Creación de Pauta:", $row['date_added'];
echo "<br> Fecha de Cambio de Estado:", $row['date_status_change'];
echo "<br> Estado de la Pauta:", $row['status'];
echo "<br>";
echo "<br>";

}

$result = mysql_query($query);
if (!$result)
return false;
else
return true;

?>
  #2 (permalink)  
Antiguo 07/06/2010, 22:37
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.990
Antigüedad: 12 años, 9 meses
Puntos: 80
Respuesta: Insertar varios registros con datos provenientes de un Select previo.

Te inserta uno solo porque el mysql_query() lo tienes afuera del while.

De todas maneras la forma mas practica de hacer esto (si es que lo vas a hacer solo una vez) es hacer directamente el insert en mysql algo como:
Código:
INSERT INTO tabla (campo1, campo2, campo3) VALUES 
SELECT campo1, campo2, campo3 FROM tabla
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 08/06/2010, 01:52
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: Insertar varios registros con datos provenientes de un Select previo.

Cita:
Iniciado por Marvin Ver Mensaje
Te inserta uno solo porque el mysql_query() lo tienes afuera del while.

De todas maneras la forma mas practica de hacer esto (si es que lo vas a hacer solo una vez) es hacer directamente el insert en mysql algo como:
Código:
INSERT INTO tabla (campo1, campo2, campo3) VALUES 
SELECT campo1, campo2, campo3 FROM tabla
Suerte!
Gracias Marvin. El uso del código será recurrente, es decir, es para uso constante de ingreso masivo en la BD. De igual forma, quisiera saber si la sintaxis que me sugieres permite el siguiente uso:

INSERT INTO tabla (campo1, campo2, campo3) VALUES
SELECT campo1, campo2, campo3 FROM tabla
Where campo2 = 'Criterio'

De nuevo gracias, y espero por tu respuesta.
  #4 (permalink)  
Antiguo 08/06/2010, 09:24
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.990
Antigüedad: 12 años, 9 meses
Puntos: 80
Respuesta: Insertar varios registros con datos provenientes de un Select previo.

Mysql lo permite tal como lo expones... es cosa de hacer una prueba replicando la tabla y asi puedes comparar con lo que ya tienes sin tener miedo de experimentar.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 08/06/2010, 11:43
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 7 años, 5 meses
Puntos: 0
Respuesta: Insertar varios registros con datos provenientes de un Select previo.

Muchas gracias, Marvin.
Haré las pruebas.
Cierro el caso.
  #6 (permalink)  
Antiguo 12/08/2010, 18:09
Avatar de mko
mko
 
Fecha de Ingreso: agosto-2010
Ubicación: la vida es un riesgo
Mensajes: 101
Antigüedad: 7 años, 3 meses
Puntos: 14
De acuerdo Respuesta: Insertar varios registros con datos provenientes de un Select previo.

hola tenia un problema muy similar al tuyo y despues de un rato he encontrado la solucion te aclaro es para insertar el resultado del el select a otra tabla y consiste en isertar un campo oculto al momento de cargar los resultado de la consulta
aclaro no se si sea el mas eficiente pero cumple con su cometido

aqui tu consulta.......
l

if ($row = mysql_fetch_array($tu_consulta)){
echo "<form action='actualiza_campo_fruta.php' method='POST'>";
echo "<table border='0'>";
echo "datos que se insertaran";
do {

echo "<tr>";
echo "<td><input name='frutas[]' type='hidden' value='".$row["frutas"]."'><div class='topmenu'>".$row["frutas"]."</div></td>";
echo "</tr>" ;
} while ($row = mysql_fetch_array($tu_consulta));
echo"<input name='guardar' type='submit' value='aceptar'>";
echo "</form></table> ";

al momento de enviar los datos del arreglo

lo haces asi :

aqui tu conexio.......


if( isset( $_POST["guardar"] ) ) // se envio el formulrio con los datos de fruta?
{

for($i=0; $i < count($_POST['frutas']); $i++)
{
$q="INSERT cal (frutas) VALUES (' ".$_POST['frutas'][$i]." ' )";
$r=mysql_query($q);
}
}

Etiquetas: previo, registros, select
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 17:45.