Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/05/2012, 13:46
unexes
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 3 meses
Puntos: 7
Consulta para filtrar mysql y PHP que falla

Hola a tod@s necesito vuestra ayuda.

Vereis tengo una consulta que me falla y no encuentro el porque, he hecho un buscador que puede filtrar los registros este tiene 3 opciones de busqueda que pueden trabajar independientemente o en conjunto. Se compone de un campo de texto donde escribo lo que quiero y me lo pasa a la consulta con la variable txt_criterio despues hay un select donde selecciono la actividad y la paso a la consulta con la variable $selactividad y luego tengo otro select con las poblaciónes y paso el Idpoblacion a la consulta con la variable $selpoblacion.
Os pongo la consulta y os digo el problema:
Código PHP:
Ver original
  1. <table width="965" height="80" border="0">
  2. <?php
  3. $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM clientes WHERE (NombreComer like '%" . $txt_criterio . "%' Or Filtro1 like '%" . $txt_criterio . "%' Or Actividades like '%" . $txt_criterio . "%' Or Actividades2 like '%" . $txt_criterio . "%')";     
  4.  
  5.         if (isset($_GET['selactividad'])and $_GET['selactividad'] <>'-1') {
  6.         $sql .= "AND clientes.Actividades = '$selactividad' OR clientes.Actividades2 = '$selactividad' ";
  7.        }else {$sql .= "AND clientes.Actividades <> '-1' ";
  8. }
  9.         if (isset($_GET['selpoblacion'])and $_GET['selpoblacion'] <>'-1') {
  10.         $txt_selpoblacion = $_GET["selpoblacion"];
  11.         $sql .= "AND Idpoblacion = $txt_selpoblacion";
  12. }
  13. $sql .=  ' ORDER BY rand(' .$dias_dif.') ';
  14. $sql .= 'LIMIT ' . (($pagination->get_page()- 1) * $records_per_page) . ', ' . $records_per_page . '';
  15.  
  16.  // Si la consulta no puede ser ejecutada
  17.         if (!($result = @mysql_query($sql))) {
  18.  // Parada de la ejecución y el mensaje de error de visualización
  19.             die(mysql_error());
  20. }
  21.  // Recuperar el número total de registros en la tabla
  22.         $rows = mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() AS rows'));
  23.  // Pasar el número total de registros a la clase de paginación
  24.         $pagination->records($rows['rows']);
  25.  // Registros por página
  26.         $pagination->records_per_page($records_per_page);
  27.  
  28. $tabla = mysql_query($sql);
  29. while ($registro = mysql_fetch_array($tabla)) {
  30. ?>
  31.         <tr>
  32.         <td width="195"><a href="<?php echo $registro['Url']; ?>"><?php echo $registro['NombreComer']; ?></a></td>
  33.         <td width="55"></td>
  34.         <td width="765"><a href="<?php echo $registro['Url']; ?>"><img border="0" src="<?php echo $registro['Imagenes']; ?>"></a></td>
  35.         </tr>
  36.        
  37.         <?php
  38. }
  39. echo $sql;
  40.         ?>
  41.        
  42.   </table>
Vereis el problema es que:
Si filtro utilizando solo el txt de texto funciona bien.
Si filtro utilizando el txt de texto y al mismo tiempo el select de Actividad funciona bien
Si filtro utilizando el txt de texto y al mismo tiempo el select de poblacion funciona bien
Si filtro solo por el select actividad funciona bien
Si filtro solo por el select de poblacion funciona bien
Pero si filtro seleccionando el select de actividad + el select de poblacion al mismo tiempo me filtra bien por la actividad pero me saca la de todas las poblaciones como si no hubiese seleccionado nada en el select población.
Como veis he hecho un "echo" a la consulta y no veo nada raro ya que me pasa perfectamente la actividad y el idpoblacion seleccionados pero el resultado de la consulta no es correcta. Este es el echo de la consulta seleccionando una actividad y una determinada población:
Cita:
SELECT SQL_CALC_FOUND_ROWS * FROM clientes WHERE (NombreComer like '%%' Or Filtro1 like '%%' Or Actividades like '%%' Or Actividades2 like '%%')AND clientes.Actividades = 'Hosteleria' OR clientes.Actividades2 = 'Hosteleria' AND Idpoblacion = 1 ORDER BY rand(14477) LIMIT 0, 5
Para el echo de la consulta no he utilizado el txt_criterio porque funciona bien y como veis he subrayado los valores que coje que son correctos, pero no se donde esta el error, supongo que debe de ser alguna comilla o parentesis que esta mal puesto pero es que al ejecutar no me da errores y eso es lo que me confunde.
Alguien sabe porque falla esta consulta.
Gracias a tod@s y espero me podais ayudar.