Foros del Web » Programando para Internet » PHP »

Puedo mejorar consulta con PHP

Estas en el tema de Puedo mejorar consulta con PHP en el foro de PHP en Foros del Web. Chicos me pueden colaborar por favor Tengo 2 select en un formulario que me entregan 2 variables (color_prenda y size_prenda) para hacer una consulta. ¿Este ...
  #1 (permalink)  
Antiguo 15/08/2013, 17:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Puedo mejorar consulta con PHP

Chicos me pueden colaborar por favor

Tengo 2 select en un formulario que me entregan 2 variables (color_prenda y size_prenda) para hacer una consulta.

¿Este ejemplo lo puedo mejorar, simplificar o hacer de forma dinamica?
Código HTML:
Ver original
  1. -- si color_prenda = todos AND size = todas
  2. SELECT * FROM articulos
  3.  
  4. -- sino color_prenda = todos AND size <> todas
  5. SELECT * FROM articulos WHERE size = size_prenda
  6.  
  7. -- sino color_prenda <> todos AND size = todas
  8. SELECT * FROM articulos WHERE color = color_prenda
  9.  
  10. -- sino color_prenda <> todos AND size <> todas
  11. SELECT * FROM articulos WHERE color = color_prenda AND size = size_prenda
  12.  
  13. fin-sino
Lo pegunto porque para 2 select (variables) debo hacer 4 combinaciones entre las variables para que la consulta sea exitosa, para 5 variables que es mi caso tendria que hacer 64 combinaciones.

Gracias

Última edición por isabelramirezmontoya; 15/08/2013 a las 18:02
  #2 (permalink)  
Antiguo 15/08/2013, 18:52
 
Fecha de Ingreso: febrero-2008
Mensajes: 109
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Puedo mejorar consulta con PHP

Hola. Lo que haría yo es permitir que seleccione 5 o 6 variables en un formulario (color, tamaño, etc.) y luego de hacer un post, consultar

Cita:
SELECT * FROM articulos WHERE color = color_prenda AND size=size_prenda AND....
O sea usaría AND o OR para meter todo en la misma consulta. Saludos.
  #3 (permalink)  
Antiguo 15/08/2013, 19:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Respuesta: Puedo mejorar consulta con PHP

omdsetenta, gracias por tu tiempo

Si la persona selecciona en cada select un valor especifico, seria muy facil, tanto asi que con una sola consulta se solucionaria el problema tal cual tu lo propones.

El problema es que en los select tambien existe la posibilidad de definir la opcion todos lo cual complica la consulta.

¿Alguna sugerencia?
  #4 (permalink)  
Antiguo 16/08/2013, 05:45
 
Fecha de Ingreso: agosto-2013
Mensajes: 5
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Puedo mejorar consulta con PHP

Tienes exactamente el mismo problema que tenia yo ayer... y sigo teniendo... en mi caso yo tengo 6 select con la opcion ALL lo cual lo complica todo muchisimo! Yo lo que hize fue algo asi.... pero sigo sin consegiuir que busque combinaciones.. a ver si me lo mejoras.

Código PHP:

include 'conexion.php';

    
$where = array();
     
    if(
$categoria!="ALL"){
        
array_push($where,' Categoria = "'.$categoria.'" ');
    };
    
    if(
$peso!="ALL"){
       
array_push($where,' Peso = "'.$peso.'" ');
    };
    
    
    if(
$duracion="ALL"){
        
array_push($where,' Duracion = "'.$duracion.'" ');
    };
    
    
     
$where = ( !empty($where) ) ? ( ' WHERE ' implode(' AND '$where) ) : '';
     
    
$qry 'SELECT * FROM videos' $where;

$result=mysql_query($qry);
if (
false === $result) {
    echo 
mysql_error();} 
Por aqui van los tiros, lo que pasa que no se porque cuando selecciono ALL ell array parace que no lo deja vacio, y tampoco me concatena los resultados cuando se seleccionan dos opciones por ejemplo...
  #5 (permalink)  
Antiguo 16/08/2013, 08:21
 
Fecha de Ingreso: agosto-2013
Mensajes: 5
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: Puedo mejorar consulta con PHP

Toma mira lo resolvi, copia el codigo y prueba a cambiar el valor ALL o Todos en $numero1, $numero2 y $ numero 3 y veras como te consulta las diferentes condiciones en la base de datos. Adaptandotelo un poco y en vez de poner el valor de las variables a mano, recogiendolas con POST veras como te sirve

Código PHP:



$numero1 
"ALL";//Aqui es donde recoges la opcion seleccionada en el select para los que tengas, por defecto he puesto All o todas
$numero2 "ALL";//Aqui es donde recoges la opcion seleccionada en el select para los que tengas, por defecto he puesto All o todas
$numero3 "ALL";//Aqui es donde recoges la opcion seleccionada en el select para los que tengas, por defecto he puesto All o todas

$numero4 "Color = verde";
$numero5 "Talla = grande";
$numero6 "Precio = 30";


$where = array();

if(
$numero1 == "ALL") {array_push($where,$numero4);};
if(
$numero2 == "ALL") {array_push($where,$numero5);};
if(
$numero3 == "ALL") {array_push($where,$numero6);};

$anuncio implode(' AND '$where);

if(empty(
$where)) {echo "Select * from ropa "; }
else {echo 
"Select * from ropa WHERE ".$anuncio;}; 

Última edición por egahedo; 16/08/2013 a las 08:25 Razón: mas apropiado a la consulta
  #6 (permalink)  
Antiguo 19/08/2013, 15:40
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Respuesta: Puedo mejorar consulta con PHP

egahedo, gracias por tu tiempo y colaboracion.

Lo resolvi de una forma mas o menos parecidad a la tuya y me funciono de maravilla.

Código HTML:
Ver original
  1. $filtros = '';
  2.  
  3. if ($color <> "todas"){
  4.  $filtros = 'color = "'.$color.'" ';
  5. }
  6.  
  7. if ($talla <> "todas"){
  8.  if (empty($filtros)) {
  9.   $filtros = 'talla = "'.$talla.'" ';
  10.  }else{
  11.   $filtros = $filtros. 'AND talla = "'.$talla.'" ';
  12.  }
  13. }
  14.  
  15. if ($marca <> "todas"){
  16.  if (empty($filtros)) {
  17.   $filtros = 'marca = "'.$marca.'" ';
  18.  }else{
  19.   $filtros = $filtros. 'AND marca = "'.$marca.'" ';
  20.  }
  21. }
  22.  
  23. if ($filtros <> ''){
  24.  $filtros = 'WHERE '.$filtros;
  25. }
  26.  
  27. select * from articulos $filtros

Etiquetas: formulario, mejorar, select, 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 14:18.