Foros del Web » Programando para Internet » PHP »

Consulta mysql con array

Estas en el tema de Consulta mysql con array en el foro de PHP en Foros del Web. Hola amigos: Necesito hacer una consulta con un array que trae unos id y que según esos id me de unos datos para mostrarlos. Esta ...
  #1 (permalink)  
Antiguo 17/08/2012, 21:36
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Consulta mysql con array

Hola amigos:

Necesito hacer una consulta con un array que trae unos id y que según esos id me de unos datos para mostrarlos.

Esta es la consulta que me da los id:

Código PHP:
Ver original
  1. if(isset($_GET['nombre_etiqueta'])) {
  2. $nombre_etiqueta2 = ($_GET['nombre_etiqueta']);
  3.  
  4.          $query4 = "SELECT * FROM detalle_etiquetas WHERE nombre_etiqueta='$nombre_etiqueta2'";
  5.          $res2 = mysql_query ($query4);
  6.          $campos2 = array();//hago el array
  7.          while ($camps2 = mysql_fetch_array($res2)){
  8.                   $campos2[] = $camps2['id_plan'];
  9.          }

Hice un for asi:

Código PHP:
Ver original
  1. $numEtiq = count($campos2);
  2.     for($i=0; $i<=$numEtiq; $i++){
  3.  
  4.     $query4 = "SELECT * FROM planes WHERE id_plan='$campos2'";
  5.  
  6.    }

pero no funciona....

como puedo hacer esta consulta????

Gracias
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 17/08/2012, 23:36
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Consulta mysql con array

una pregunta , a que te referis con "pero no funciona" ? tenes algun error en pantalla o que?

a demas, $nombre_etiqueta2 = ($_GET['nombre_etiqueta']); porque englobas en paréntesis curvos ?

$nombre_etiqueta2 = $_GET['nombre_etiqueta']; no se te ocurrió tomarlo así?

y en $query4 = "SELECT * FROM planes WHERE id_plan='$campos2'";

no deberías poner en vez de $campos2 la variable $i? sino no se que sentido tiene la variable $i .
  #3 (permalink)  
Antiguo 18/08/2012, 01:19
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta mysql con array

Hola kimmy, creo que te falta colocar la variable $i para hacer referencia a la posicion del arreglo...
Código PHP:
Ver original
  1. $numEtiq = count($campos2);
  2. for($i=0; $i<$numEtiq; $i++){
  3.  
  4.     $query4 = "SELECT * FROM planes WHERE id_plan='".$campos2[$i]."'";
  5.  
  6.    }

no te resultaria mas facil hacer una consulta anidada a la base de datos?
tal ves puedes contar mas acerca de lo que quieres lograr
  #4 (permalink)  
Antiguo 18/08/2012, 09:26
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Consulta mysql con array

Hola, hice lo que me indican pero no funciona.

Yo tengo un buscador con varias etiquetas (opciones).

http://vamonosdevacaciones.com.ve/bu...es%20Escolares

Ya me funcionan las que son por destino y estas que me faltan son por tipo de plan. Lo que necesito es que según la palabra que viene por get consulte y me muestre los planes dentro de una paginacion.

Todo el código de la parte del buscador para tipo de plan es este:

Código PHP:
Ver original
  1. if(isset($_GET['nombre_etiqueta'])) {
  2. $nombre_etiqueta2 = $_GET['nombre_etiqueta'];
  3.  
  4. $query4 = "SELECT * FROM detalle_etiquetas WHERE nombre_etiqueta='$nombre_etiqueta2'";
  5.          $res2 = mysql_query ($query4);//lanzo la consulta
  6.          $campos2 = array();//hago el array
  7.          while ($camps2 = mysql_fetch_array($res2)){
  8.                   $campos2[] = $camps2['id_plan']; // sólo conservas la ID
  9.          }
  10.  
  11.         $numEtiq = count($campos2);
  12.  
  13.         for($i=0; $i<=$numEtiq; $i++){
  14.            
  15.         //echo $campos2[$i] .'<br>';
  16.         $query4 = "SELECT * FROM planes WHERE id_plan='".$campos2[$i]."'";
  17.  
  18.             $rut = "xxx/xxx/logos/"; // Indicar ruta
  19.    
  20.         //   Instanciamos el objeto
  21.         $paging = new PHPPaging($conn);
  22.  
  23.         # Aqui se pone la cantidad de registros por pagina que se quieren mostrar
  24.         $hasta = 5;
  25.  
  26.         if($pag==""){
  27.         $desde = 0;
  28.         $pag = 1;    
  29.         }
  30.         else{
  31.         $pag = $_GET["pag"];
  32.         $pagS = $pag - 1;
  33.         $desde = $hasta * $pagS;    
  34.         }
  35.  
  36.          $query4 = "SELECT * FROM planes WHERE id_plan='".$campos2[$i]."' ORDER BY id_plan ASC";
  37.  
  38.         }
  39.         $paging->agregarConsulta($query4);
  40.  
  41.         // Ejecutamos la paginación
  42.         $paging->ejecutar();
  43.  
  44.         while ($query4  = $paging->fetchResultado()) {
  45.         $id_plan = $query4['id_plan'];
  46.         $id_posada = $query4['id_posada'];
  47.         $nombre_posada = $query4['nombre_posada'];     
  48.         $nombre_plan = $query4['nombre_plan'];
  49.         $descripcion_plan = $query4['descripcion_plan'];
  50.         $incluye = $query4['incluye'];
  51.         $desde = $query4['desde'];
  52.         $hasta = $query4['hasta'];
  53.         $precio_adultos_a = $query4['precio_adultos_a'];
  54.  
  55.         $lafoto = $id_posada . "_" . $id_plan . "." . "jpg";
  56.  
  57.             echo
  58.         "
  59.         <form action='cotizacion2.php' method='get'>
  60.        
  61.         <table id='tabla_plan' class='borde'>
  62.             <tr>
  63.                 <td><input name='id_plan' type='hidden' value='".$id_plan."' />
  64.                 <input name='id_posada' type='hidden' value='".$id_posada."' />
  65.                 <input name='nombre_posada' type='hidden' value='".$nombre_posada."' />
  66.                     <h3>$nombre_plan</h3>
  67.                     <input name='nombre_plan' type='hidden' value='".$nombre_plan."' />
  68.                     <br>
  69.                     <img src='$rut$lafoto' />
  70.                 </td>
  71.                 <td align='justify'>
  72.                     <h3>Posada: $nombre_posada</h3>
  73.                     <br>
  74.                     <h4>$descripcion_plan</h4>
  75.                     <br>
  76.                 <h2><a href='javascript:f_verDetalle(".$query4["id_plan"].");'>Restaurantes asociados</a></h2>
  77.                 </td>
  78.  
  79.                 <td bgcolor='#FFFFD9'>
  80.                     <h2>Habitación por noche</h2>
  81.                     <br>
  82.                     <h1>Bs. $precio_adultos_a</h1>
  83.                     <br>
  84.                      <input class='bt1' name='Cotizar' value='Cotizar' type='submit' alt='SUBMIT' />
  85.                 </td>
  86.          </tr>
  87.          <br>
  88.         </table>
  89.                 </form>
  90.  
  91.             ";
  92.             }
  93.         // Imprimimos la barra de navegación
  94.         echo "<br>";
  95.         echo "<div class='h22'>Navegación: ".$paging->fetchNavegacion();echo "</div>";
  96.  
  97. }

No se como hacerlo funcionar ??????
__________________
Caminando con el corazón partío
  #5 (permalink)  
Antiguo 18/08/2012, 09:26
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Consulta mysql con array

mmm podrías hacer algo así...

Código PHP:
Ver original
  1. <?php
  2. $sql2 = 'SELECT * FROM planes WHERE id_plan IN('.implode(',',$campos2).')';
  3. mysql_query($sql2,$conexion) or die(mysql_error());

Edito: Creo que para comenzar tienes un poco confusa tu idea, la forma en que lo estas haciendo te repetirá el formulario, en fin, aparte dices que no funciona, PERO, no dices el porque, te arroja error? no hace lo que debería?, se un poquito mas especifica si no, será estar adivinando que es lo que pasa...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 18/08/2012 a las 09:35
  #6 (permalink)  
Antiguo 18/08/2012, 09:47
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Consulta mysql con array

Coloqué lo que indicaste pero nada aparece.

El error es que no me muestra nada.

No me debería repetir el formulario porque lo coloco fuera del for. En la primera parte si me funcionó porque no tengo que hacer la consulta con array.

Este es el primer código (de busqueda por destino) y funciona:

Código PHP:
Ver original
  1. if(isset($_GET['destino'])) {
  2. $destino2 = ($_GET['destino']);
  3.              
  4.         $query3=mysql_query("select * from planes",$conn);  
  5.      
  6.         $query3 = "SELECT * FROM planes WHERE destino='$destino2'";
  7.         $res = mysql_query ($query3);//lanzo la consulta
  8.  
  9.          $campos = array();//hago el array
  10.          while ($camps = mysql_fetch_array($res)){
  11.                   $campos[] = $camps['id_plan']; // sólo conservas la ID
  12.          }
  13.         $numDes = count($campos);
  14.         //echo $numDes;
  15.         for($i=0; $i<=$numDes; $i++){
  16.            
  17.         $rut = "xxx/xxx/logos/"; // Indicar ruta
  18.        
  19.         //echo $campos[$i];
  20.        
  21.            
  22.             //   Instanciamos el objeto
  23.         $paging = new PHPPaging($conn);
  24.  
  25.         # Aqui se pone la cantidad de registros por pagina que se quieren mostrar
  26.         $hasta = 5;
  27.  
  28.         if($pag==""){
  29.         $desde = 0;
  30.         $pag = 1;    
  31.         }
  32.         else{
  33.         $pag = $_GET["pag"];
  34.         $pagS = $pag - 1;
  35.         $desde = $hasta * $pagS;    
  36.         }
  37.  
  38.          $query3 = "SELECT * FROM planes WHERE destino='$destino2' ORDER BY id_plan ASC";
  39.         }
  40.        
  41.         $paging->agregarConsulta($query3);
  42.  
  43.         // Ejecutamos la paginación
  44.         $paging->ejecutar();
  45.  
  46.         while ($query3  = $paging->fetchResultado()) {
  47.         $id_plan = $query3['id_plan'];
  48.         $id_posada = $query3['id_posada'];
  49.         $nombre_posada = $query3['nombre_posada'];     
  50.         $nombre_plan = $query3['nombre_plan'];
  51.         $descripcion_plan = $query3['descripcion_plan'];
  52.         $incluye = $query3['incluye'];
  53.         $desde = $query3['desde'];
  54.         $hasta = $query3['hasta'];
  55.         $precio_adultos_a = $query3['precio_adultos_a'];
  56.  
  57.         $lafoto = $id_posada . "_" . $id_plan . "." . "jpg";
  58.  
  59.             echo
  60.         "
  61.         <form action='cotizacion2.php' method='get'>
  62.        
  63.         <table id='tabla_plan' class='borde'>
  64.             <tr>
  65.                 <td><input name='id_plan' type='hidden' value='".$id_plan."' />
  66.                 <input name='id_posada' type='hidden' value='".$id_posada."' />
  67.                 <input name='nombre_posada' type='hidden' value='".$nombre_posada."' />
  68.                     <h3>$nombre_plan</h3>
  69.                     <input name='nombre_plan' type='hidden' value='".$nombre_plan."' />
  70.                     <br>
  71.                     <img src='$rut$lafoto' />
  72.                 </td>
  73.                 <td align='justify'>
  74.                     <h3>Posada: $nombre_posada</h3>
  75.                     <br>
  76.                     <h4>$descripcion_plan</h4>
  77.                     <br>
  78.                 <h2><a href='javascript:f_verDetalle(".$query3["id_plan"].");'>Restaurantes asociados</a></h2>
  79.                 </td>
  80.  
  81.                 <td bgcolor='#FFFFD9'>
  82.                     <h2>Habitación por noche</h2>
  83.                     <br>
  84.                     <h1>Bs. $precio_adultos_a</h1>
  85.                     <br>
  86.                      <input class='bt1' name='Cotizar' value='Cotizar' type='submit' alt='SUBMIT' />
  87.                 </td>
  88.          </tr>
  89.          <br>
  90.         </table>
  91.                 </form>
  92.  
  93.             ";
  94.             }
  95.         // Imprimimos la barra de navegación
  96.         echo "<br>";
  97.         echo "<div class='h22'>Navegación: ".$paging->fetchNavegacion();echo "</div>";
  98.  
  99. }

pero el código de busqueda por tipo de plan no me muestra nada
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 18/08/2012, 10:23
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Consulta mysql con array

Sin ofender amiga, pero tu código esta un poco "patas arriba" >.<, vemos como solucionamos esto...

Comenzamos con que DEBES DEPURAR TUS CONSULTAS SQL SIEMPRE, porque de esto?, pues muy facil, muchas veces cometemos errores tipográficos en las sentencias SQL, pero estos errores no se muestran en pantalla automaticamente, y lo unico que sucede es que la query no retorna ningún resultado, para esto agrega SIEMPRE en mysql_query, mysql_connect, mysql_select_db, etc la función mysql_error de la siguiente manera:

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect($host,$user,$pass) or die(mysql_error());
  3. mysql_select_db($db,$conexion) or die(mysql_error());
  4.  
  5. $sql = 'SELECT * FROM mitabla';
  6. mysql_query($sql,$conexion) or die(mysql_error());

Ahora, en el código que has publicado en la linea 4 ejecutas una query PERO, en la linea 6 sobre escribes el resultado de la query anterior, si no vas a usar la query anterior no la agregues >.<

En la linea 15 no le veo sentido a tu for amiga, solo veo que defines valores a varias variables PERO se sobre escriben en la siguiente iteración del loop, por lo tanto es ilógico =/

En la linea 35 de nuevo generas una query PERO es igual al query de la linea 6 unicamente cambia el orden de los resultados...

Por ultimo en la linea 46 haces un nuevo loop while, por lo cual si la sentencia arroja mas de 1 resultado el form se repetirá según el numero de items arrojados...

En fin, son varios errores que tiene tu código, pero se puede rescatar la idea original, no podré generarte un código para hacer copy/paste, al menos no al 100%, pero será "facil" adaptar a tus necesidades, OJO, que el código generado es lo que al final YO ENTENDI, el resultado puede ser diferente a lo que pretendes >.<

Código PHP:
Ver original
  1. <?php
  2.  
  3. <?php
  4.  
  5. if (isset($_GET['nombre_etiqueta'])) {
  6.     $nombre_etiqueta = $_GET['nombre_etiqueta'];
  7.  
  8.     $sql = 'SELECT * FROM detalle_etiquetas WHERE nombre_etiqueta="'.$nombre_etiqueta.'"';
  9.     $query = mysql_query($sql,$conn) or die(mysql_error());
  10.  
  11.     $campos = array();
  12.     while($row = mysql_fetch_assoc($query)) {
  13.         $campos[] = $row['id_plan'];   
  14.     }
  15.  
  16.     /*
  17.     * No eh usado la clase PHPPaging, pero paginaremos a mano, aquí
  18.     * puedes usar el metodo que prefieras...
  19.     */
  20.  
  21.     $sql = 'SELECT COUNT(*) FROM planes WHERE id_plan IN('.implode(',',$campos).') ORDER BY id_plan ASC';
  22.     $query = mysql_query($sql,$conn) or die(mysql_error());
  23.  
  24.     //Definimos en que pagina estamos, si existe $_GET['pag'] obtenemos su valor, de lo contrario será 1
  25.     $pagActual = isset($_GET['pag']) ? $_GET['pag'] : 1;
  26.     //obtenemos el total de items...
  27.     $totalItems = mysql_result($query, 0);
  28.     //defines el numero de items que se mostrarán por página
  29.     $itemsPorPagina = 25;
  30.     //calculamos las páginas
  31.     $totalPags = ceil($totalItems / $itemsPorPagina);
  32.     //calculamos desde que item nos devolvera mysql
  33.     $itemInicio = $itemsPorPagina * ($pagActual - 1);
  34.  
  35.     //por fin hacemos la sentencia para recuperar los items...
  36.     $sql = 'SELECT * FROM planes WHERE id_plan IN('.implode(',',$campos).' ORDER BY id_plan ASC LIMIT '.$itemInicio.','.$itemsPorPagina;
  37.     $query = mysql_query($sql,$conn) or die(mysql_error());
  38.  
  39.     $rut = "xxx/xxx/logos/";
  40.  
  41.     while($row = mysql_fetch_assoc($query)) {
  42.         $id_plan = $query4['id_plan'];
  43.         $id_posada = $query4['id_posada'];
  44.         $nombre_posada = $query4['nombre_posada'];      
  45.         $nombre_plan = $query4['nombre_plan'];
  46.         $descripcion_plan = $query4['descripcion_plan'];
  47.         $incluye = $query4['incluye'];
  48.         $desde = $query4['desde'];
  49.         $hasta = $query4['hasta'];
  50.         $precio_adultos_a = $query4['precio_adultos_a'];
  51.  
  52.         $lafoto = $id_posada . "_" . $id_plan . "." . "jpg";
  53.  
  54.             echo
  55.         "
  56.        <form action='cotizacion2.php' method='get'>
  57.        
  58.        <table id='tabla_plan' class='borde'>
  59.            <tr>
  60.                <td><input name='id_plan' type='hidden' value='".$id_plan."' />
  61.                <input name='id_posada' type='hidden' value='".$id_posada."' />
  62.                <input name='nombre_posada' type='hidden' value='".$nombre_posada."' />
  63.                    <h3>$nombre_plan</h3>
  64.                    <input name='nombre_plan' type='hidden' value='".$nombre_plan."' />
  65.                    <br>
  66.                    <img src='$rut$lafoto' />
  67.                </td>
  68.                <td align='justify'>
  69.                    <h3>Posada: $nombre_posada</h3>
  70.                    <br>
  71.                    <h4>$descripcion_plan</h4>
  72.                    <br>
  73.                <h2><a href='javascript:f_verDetalle(".$query4["id_plan"].");'>Restaurantes asociados</a></h2>
  74.                </td>
  75.  
  76.                <td bgcolor='#FFFFD9'>
  77.                    <h2>Habitación por noche</h2>
  78.                    <br>
  79.                    <h1>Bs. $precio_adultos_a</h1>
  80.                    <br>
  81.                     <input class='bt1' name='Cotizar' value='Cotizar' type='submit' alt='SUBMIT' />
  82.                </td>
  83.         </tr>
  84.         <br>
  85.        </table>
  86.                </form>
  87.  
  88.            ";
  89.     }
  90.  
  91.     //creamos el menú paginación...
  92.     $paginacion = '<p>';
  93.     $paginacion .= ($pagActual > 1) ? '<a href="'.$_SERVER['PHP_SELF'].'?pag='.($pagActual - 1).'&nombre_etiqueta='.$nombre_etiqueta.'">Anterior</a> ' : 'Anterior ';
  94.     for($i=1; $i<=$totalPags; $i++) {
  95.         $paginacion .= ($i == $pagActual) ? '<strong>'.$i.'</strong> ' : '<a href="'.$_SERVER['PHP_SELF'].'?pag='.$i.'&nombre_etiqueta='.$nombre_etiqueta.'">'.$i.'</a> ';
  96.     }
  97.     $paginacion .= ($pagActual < $totalPags) ? '<a href="'.$_SERVER['PHP_SELF'].'?pag='.($pagActual + 1).'&nombre_etiqueta='.$nombre_etiqueta.'">Siguiente</a>' : 'Siguiente';
  98.     $paginacion .= '</p>';
  99.  
  100.     echo $paginacion;
  101. }

Nota: ojo, no lo eh probado ya que no tengo tu db, pero debería funcionar al menos teoricamente >.<

Actualización: veo que el ultimo código que publicaste no es el mismo que el anterior a este, así que me equivoqué en la variable GET 'nombre_etiqueta', el cual ya fue corregido >.<, también los comentarios que hice fueron hacia el ultimo código que publicaste, no al primero, pero de todas maneras deberías checarlos
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 18/08/2012 a las 10:34
  #8 (permalink)  
Antiguo 18/08/2012, 12:39
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Consulta mysql con array

Tienes toda la razón, es un código horrible!!! Es que me confundí mucho.

Analicé el que me enviaste, lo probé y le arreglé dos detalles y funcionó.

Muchas Gracias Nemutagk.

__________________
Caminando con el corazón partío

Etiquetas: mysql
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 14:45.