Foros del Web » Programando para Internet » PHP »

Consulta para filtrar mysql y PHP que falla

Estas en el tema de Consulta para filtrar mysql y PHP que falla en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/05/2012, 13:46
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 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.
  #2 (permalink)  
Antiguo 30/05/2012, 15:32
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Consulta para filtrar mysql y PHP que falla

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
prueba esto en myadmin y si funciona, corrige el código.
Código PHP:
 $sql .= "AND (clientes.Actividades = '$selactividad' OR clientes.Actividades2 = '$selactividad') "
Saludos

Última edición por oscartt67; 30/05/2012 a las 15:37 Razón: error edicion
  #3 (permalink)  
Antiguo 30/05/2012, 16:49
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Respuesta: Consulta para filtrar mysql y PHP que falla

oscartt67 Muchas gracias.

Lo he probado por encima y funciona perfectamente, yo sabia que era algo de comillas o parentesis pero no lo encontraba y me estaba volviendo majara de tanto probar el dichoso código, a veces lo que no ve una persona otra lo ve enseguida.

Gracias de nuevo

Etiquetas: falla, filtrar, imagenes, mysql, registro, sql, tabla, variables
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 18:18.