Foros del Web » Programando para Internet » PHP »

Consulta con variable igual a cualquier cosa

Estas en el tema de Consulta con variable igual a cualquier cosa en el foro de PHP en Foros del Web. Creando un buscador y evitando los if's me encuentro con que tengo un select ($tp) con las siguientes opciones: Código PHP: $opciones3  = array( "Todo" , ...
  #1 (permalink)  
Antiguo 19/01/2014, 09:40
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Consulta con variable igual a cualquier cosa

Creando un buscador y evitando los if's me encuentro con que tengo un select ($tp) con las siguientes opciones:


Código PHP:
$opciones3 = array("Todo","Oferta","Demanda","Intercambio"); 
Luego le paso un switch:

Código PHP:
switch($tp){
    case 
'Oferta':
        
$tip "OFERTA";
        break;
    case 
"Demanda":
        
$tip "DEMANDA";
        break;
    case 
"Intercambio":
        
$tip "INTERCAMBIOS";
        break;
    case 
"Todo":
        
$tip "XXX";
        break;    



Lo tengo así para construir la siguiente consulta:


Código PHP:
$rst_form=mysql_query("SELECT * FROM form WHERE apartado3 = '$tip' $order"); 

Con esto conseguiría filtrar las opciones que coinciden con OFERTA, DEMANDA e INTERCAMBIOS, pero ¿y si me piden la opción TODO.?

No existen en el apartado3 la opción TODO, así que mi pregunta:


¿Existe algún tipo de código que al poner apartado3=(codigo en cuestion) coja cualquier cosa escrita?

me suena algo del símbolo %, pero nose...

Así cojería todo, OFERTA, DEMANDA e INTERCAMBIO y funcionaría bien...GRACIAS!
  #2 (permalink)  
Antiguo 19/01/2014, 09:59
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Consulta con variable igual a cualquier cosa

Pero eso es una auténtica chapuza de sistema. Tendrías que hacer una query preparada en cada caso y no mezclar ni formarla a piezas.

En fin, si quieres bypassearlo deja la variable $tip como '%' y utiliza LIKE, pero no te lo recomiendo en absoluto.
  #3 (permalink)  
Antiguo 19/01/2014, 10:05
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Consulta con variable igual a cualquier cosa

El problema es que quiero que puedan filtrar en su busqueda a través de 5 opciones diferentes:

-categoria
-ordenar por
-tipo
-zona
-Buscador por palabras


Y entonces tendría una infinidad de if's

e pensado en guardar lo que el selecciona en los selects de opciones o filtros de la pagina web en variables y pasarlas a la consulta...

¿Esta mal así?
  #4 (permalink)  
Antiguo 19/01/2014, 10:20
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Consulta con variable igual a cualquier cosa

¿Y no podrías filtrar esos datos con PHP después de hacer una query completa? Resulta fácil manejarlos cuando los guardas en un array asociativo con fetch_assoc.
  #5 (permalink)  
Antiguo 19/01/2014, 11:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Consulta con variable igual a cualquier cosa

Se me ocurre una manera de formar la consulta y sin usar la estructura selectiva

Código PHP:
Ver original
  1. $opciones3 = array("Todo", "Oferta", "Demanda", "Intercambio");
  2. $indice = array_search($tp, $opciones3);
  3. $condicion = $indice ? " WHERE apartado3 = '" . strtoupper($opciones3[$indice]) . "'" : "";
  4. $rst_form = mysql_query("SELECT * FROM form" . $condicion);

Con array_search(), busco el valor de $tp en el array $opciones3 y si se encuentra, tomo su índice o posición, armo la parte de la condición de la consulta empezando por el "WHERE..." y le concateno el elemento del array convertido a mayúsculas. Si el elemento está en la posición cero (que se evalúa como FALSE), quiere decir que se eligió la opción "Todos" y es por eso que, en ese caso, el valor que asignaré a $condicion será una cadena vacía.

Al final, concateno el valor de $condicion a la consulta. Así es como se vería en cada caso:

Código MySQL:
Ver original
  1. SELECT * FROM form /*Todos*/
  2. SELECT * FROM form WHERE apartado3 = 'Oferta' /*Oferta*/
  3. SELECT * FROM form WHERE apartado3 = 'Demanda' /*Demanda*/
  4. SELECT * FROM form WHERE apartado3 = 'Intercambio' /*Intercambio*/

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 19/01/2014 a las 11:46
  #6 (permalink)  
Antiguo 19/01/2014, 11:56
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Consulta con variable igual a cualquier cosa

la solucion con un array para los tipos Todo, Oferta, etc... esta muy mal
debes hacer otra tabla de nombre Tipo y ahi metes los distintos tipos y listo, obvio que relacionando la tabla form con tabla tipo,

es mas ordenado y facil, y si quieres tener otro tipo, no tienes que meterle mano al codigo,

bye

Etiquetas: igual, select, sql, variable
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 08:21.