Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] select + array + for de ids

Estas en el tema de select + array + for de ids en el foro de PHP en Foros del Web. Hola a tod@s. Espero esten bien. Necesito ayuda con este código: Me envian un array con identificadores (el cual siempre cambia de cantidad): Código PHP: ...
  #1 (permalink)  
Antiguo 07/04/2016, 10:36
 
Fecha de Ingreso: septiembre-2014
Mensajes: 79
Antigüedad: 9 años, 7 meses
Puntos: 0
select + array + for de ids

Hola a tod@s. Espero esten bien.
Necesito ayuda con este código:
Me envian un array con identificadores (el cual siempre cambia de cantidad):
Código PHP:
 $Id=array(1,2,3,4,5,6,7,8,9); 
Y debo hacer una consulta que llame a todos los ids que trae el array:
Código PHP:
for($i 1$MaxIds=count($Id); $i $MaxIds$i++) {
$Pi" OR Id=".$Id[$i];
}
$stmt $conexion->prepare('SELECT * FROM tabla WHERE Id='.$Id[0].$Pi'');
    
$stmt->execute();
    while( 
$datos $stmt->fetch())
{
    
$Nombre[]= $datos["Nombre"];

¿Cómo hago para recorrer el array completo y que lo imprima en la consulta?. Me está faltando algo y no se me ocurre que es.
Muchas gracias!!!!
  #2 (permalink)  
Antiguo 07/04/2016, 13:04
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: select + array + for de ids

y porque no algo así :

Código PHP:
Ver original
  1. include("tu archivo conexion");
  2. $id=array(1,2,3,4);  
  3.  
  4. foreach ($id as $ids => $keyv)
  5.    
  6. {
  7.     $stmt = $conexion->prepare('SELECT * FROM tabla WHERE Id =:id');
  8.     $stmt -> bindValue(':id',$keyv);
  9.     $stmt->execute();
  10.     while($datos = $stmt->fetch())
  11.     {
  12.     $nombre[]= $datos["Nombre"];
  13.     }  
  14.    
  15. }
  16. print_r($nombre);
  #3 (permalink)  
Antiguo 07/04/2016, 13:36
 
Fecha de Ingreso: septiembre-2014
Mensajes: 79
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: select + array + for de ids

Impecable. Muy práctico!!! Me ayudaste un montón y de paso me ayudaste a comprender una forma mejor de hacer las cosas,.Muchas gracias. Te puedo hacer otra pregunta?

Si tendría que hacer otras consultas ahora, sobre esos 4 datos que traigo (suponiendo que sean unos 100 datos, no 4) tendría que crear un nuevo foreach con cada uno de los resultados?
ejemplo:
Código PHP:
Ver original
  1. foreach ($nombre as $nombres => $keyn)
  2.  {
  3. $stmt = $conexion->prepare('SELECT * FROM otratabla WHERE Nombre =:nombre');
  4. $stmt -> bindValue(':nombre',$keyn);
  5. $stmt->execute();
  6.     while($datosn = $stmt->fetch())
  7.     {
  8.     $direccion[]= $datosn["Direccion"];
  9.     }

algo asi?

Última edición por robertocarrillo; 07/04/2016 a las 13:49
  #4 (permalink)  
Antiguo 07/04/2016, 14:21
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: select + array + for de ids

si tendrías que recorrer el arreglo $nombre así como lo haces.
imagino que son tablas distintas. porque si son la misma puedes hacerlo directamente en esa.

Última edición por sonystar_17; 07/04/2016 a las 14:29
  #5 (permalink)  
Antiguo 07/04/2016, 14:51
 
Fecha de Ingreso: septiembre-2014
Mensajes: 79
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: select + array + for de ids

Sip, son 2 tablas distintas.
Y se podría complicar un poco mas...
Código PHP:
require_once "clases/conexion.php";
$conexion1 dbConexion1();
$conexion2 dbConexion2();    
$id=array(1,2,3,4);  
#------------------------------------------------------------------------------------------------------------------------------
foreach ($id as $ids => $keyv)
{
    
$stmt $conexion1->prepare('SELECT * FROM tabla WHERE Id =:id');
    
$stmt -> bindValue(':id',$keyv);
    
$stmt->execute();
    while(
$datos $stmt->fetch())
    {
    
$IdCalle1[]= $datos["calle1"];
    
$IdCalle2[]= $datos["calle2"];
    }
  
}
#------------------------------------------------------------------------------------------------------------------------------
foreach ($IdCalle1 as $IdsCalle1 => $keyc1)
{
    
$stmt $conexion2->prepare('SELECT calle FROM calle1 WHERE id =:idcalle1');
    
$stmt -> bindValue(':idcalle1',$keyc1);
    
$stmt->execute();
    while(
$datosc $stmt->fetch())
    {
    
$Calle1[]= $datosc["calle"];
    }  
}
#------------------------------------------------------------------------------------------------------------------------------
foreach ($IdCalle2 as $IdsCalle2 => $keyc2)
{
    
$stmt $conexion2->prepare('SELECT calle FROM calle1 WHERE id =:idcalle2');
    
$stmt -> bindValue(':idcalle2',$keyc2);
    
$stmt->execute();
    while(
$datosc $stmt->fetch())
    {
    
$Calle2[]= $datosc["calle"];
    }  

Lo que esta sucediendo hasta ahora es: Me llega un array con id's. Con esos id busco registros en una tabla, con los resuptados de los idś de las 2 calles busco en otra tabla los nombres de dichas calles. Hasta ahí todo perfecto y te lo agradezco de corazón.
Ahora como hago para consultar por $calle1 y calle2=resultado a otra tabla dentrodel grupo de consultas?
Ejemplo:

foreach ($Calle1 as $Calless1 => $keyk1)
{
$stmt = $conexion2->prepare('SELECT dato FROM datos WHERE calle1 =:calle1 AND calle2 =:calle2');
$stmt -> bindValue(':calle1',$keyk1);
$stmt -> bindValue(':calle2',$keyk2);
$stmt->execute();
while($datosca = $stmt->fetch())
{
$dato[]= $datosca["dato"];
}
}
Podría hacerse?
  #6 (permalink)  
Antiguo 07/04/2016, 17:25
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: select + array + for de ids

si puedes obviamente.
pero deberías relacionar tu tablas ,porque por lo que veo no tienes un modelo relacional.

y como no conozco lo que haces realmente , capaz existan otra forma de abordarlo pero igualmente de esta forma se puede hacer.

suerte !
  #7 (permalink)  
Antiguo 08/04/2016, 06:11
 
Fecha de Ingreso: septiembre-2014
Mensajes: 79
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: select + array + for de ids

Está bien, pero, como hago para pasarle los 2 arrays en el mismo foreach. $calle1[] y $calle2[]. Para crear un loop en que cada linea me traiga un resultado y generar el nuevo array $dato[].
Por que hasta ahora comprendí como hacerlo con un solo array:
Código PHP:
foreach ($Calle1 as $Calless1 => $keyk1)
{
$stmt $conexion2->prepare('SELECT dato FROM datos WHERE calle1 =:calle1 AND calle2 =:calle2');
$stmt -> bindValue(':calle1',$keyk1);
#$stmt -> bindValue(':calle2',$keyk2);   --------????
$stmt->execute();
while(
$datosca $stmt->fetch())
{
$dato[]= $datosca["dato"];
}

¡Debería crear un array multidimencional donde calles1[]=columna1, calles2[]= columna2. Y luego generar un while que recupere las filas ?

Gracias por enseñarme!!!

Última edición por robertocarrillo; 08/04/2016 a las 07:34
  #8 (permalink)  
Antiguo 08/04/2016, 13:11
 
Fecha de Ingreso: septiembre-2014
Mensajes: 79
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: select + array + for de ids

Ya lo solucioné gracias a tu importantísima ayuda:

Código PHP:
foreach ($Calle1 as $Calless1 => $keyk1)
foreach (
$Calle2 as $Calless2 => $keyk2)
{
$stmt $conexion2->prepare('SELECT dato FROM datos WHERE calle1 =:calle1 AND calle2 =:calle2');
$stmt -> bindValue(':calle1',$keyk1);
$stmt -> bindValue(':calle2',$keyk2);
$stmt->execute();
while(
$datosca $stmt->fetch())
{
$dato[]= $datosca["dato"];
}


Muchísimas gracia!!!!!!!

Etiquetas: ids, select, tabla
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 15:29.