Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/02/2010, 03:51
Xabu
 
Fecha de Ingreso: noviembre-2009
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 1
Consulta SQL (Multiples variables en WHERE)

Pues estoy haciendo un modulo y la temática es un calendario de conciertos, he logrado crear el formulario para ingresar los datos en la BD y para extraerlos y mostrarlo, ahora estoy con el de editarlos y borrarlos. Voy bastante bien pero me ha sugido un problema que no consigo deducir como solucionarlo. En mi formulario de busqueda de los conciertos publicados hay 4 valores posibles:

Nombre:
Fecha: (mes) - (año)
Lugar:
Mostrar todo

Si pulsas en mostrar todo, te muestra todos los registros de la base de datos, eso esta bien. El problema es a la hora de la busqueda segun las variables introducidas. He creado este codigo:

Código PHP:
if ($_POST['enviado'] == 'si') {
        
$nombre $_POST['name'];
        
$mes $_POST['mes'];
        
$anno $_POST['anno'];
        
$lugar $_POST['lugar'];
        
$mostrar $_POST['mostrar'];
        
        if (
$mostrar == "todo") {
        
$result mysql_query("SELECT id, nombre, dia, mes, anno, lugar FROM conciertos ORDER BY id DESC;");
        while (
$registro mysql_fetch_array($result)) {
            echo  
$registro[1] . " - " .  $registro[2] . "/" $registro[3] . "/" $registro[4] . " - " $registro[5] . " -> <a href='".$url_path."editar.php?editar=si&id=".$registro[0]."'>Modificar</a><br />";
        }
        
mysql_free_result($result);
        
mysql_close($conexion);
        } else {
            if (
$nombre == ""$nombre="*";
            if (
$mes == "---"$mes="*";
            if (
$anno == "---"$anno="*";
            if (
$lugar == ""$lugar="*";
            
$result mysql_query("SELECT id, nombre, dia, mes, anno, lugar FROM conciertos WHERE nombre Like '$nombre' AND mes Like '$mes' AND anno Like '$anno' AND lugar Like '$lugar' ORDER BY id DESC;");
            while (
$registro mysql_fetch_array($result)) {
                echo  
$registro[1] . " - " .  $registro[2] . "/" $registro[3] . "/" $registro[4] . " - " $registro[5] . " -> <a href='".$url_path."editar.php?editar=si&id=".$registro[0]."'>Modificar</a>";
            }
            
mysql_free_result($result);
            
mysql_close($conexion);
        } 
La segunda parte del codigo deberia buscar los registros segun los valores introducidos en el formulario y lo hace, pero SOLO si han sido rellenados todos y existe equivalencia con todos los campos de un registro. Por lo cual este motor de busqueda deja mucho que desear XDDDD Para solucionarlo se me ocurrio que si se dejaba un campo vacio su valor pasara a ser * (if ($nombre == "") $nombre="*";), asi en el WHERE habria algo asi(nombre Like *). Pero esto tampoco funciona. Tambien probe asi (nombre Like '$nombre*') pero nada.

Pues resumiendo necesito un WHERE que busque registros con similitudes a los valores ingresados, sin necesidad de que sean introducidos todos (Nombre, mes, año y lugar). Alguien se le ocurre algo? T_T

Desde ya gracias.

Última edición por Xabu; 04/02/2010 a las 05:56