Ver Mensaje Individual
  #5 (permalink)  
Antiguo 10/03/2012, 20:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema en una consulta con Where

Bueno, te voy a hacer una aclaración de a qué me refería con que acá no se tratan temas de programación.
Mira, de todo esto:
Código PHP:
Ver original
  1. <table width="765" height="80" border="0">
  2.         <?php
  3. $sql = "SELECT SQL_CALC_FOUND_ROWS actividades.* FROM actividades WHERE actividades.Actividades = '$selactividad' and NombreComer like '%" . $txt_criterio . "%'";
  4. $myVariable = "";
  5.         if (isset($_GET['selpoblacion'])and $_GET['selpoblacion'] >0) {
  6.         $txt_selpoblacion = $_GET["selpoblacion"];
  7.         $sql .= "AND idpoblacion =  $txt_selpoblacion ";
  8. }
  9. $sql .= ' ORDER BY NombreComer ASC '; // Salen desordenados pero siempre el mismo desorden si se pone "rand(Nombre_del_campo)"
  10. $sql .= 'LIMIT ' . (($pagination->get_page()- 1) * $records_per_page) . ', ' . $records_per_page . '';
  11. //"LIMIT " . (($pagination->get_page()- 1) * $records_per_page) . ", " . $records_per_page . "";
  12.   // Si la consulta no puede ser ejecutada
  13.         if (!($result = @mysql_query($sql))) {
  14.  
  15.         // Parada de la ejecución y el mensaje de error de visualización
  16.             die(mysql_error());
  17.          }
  18.         // Recuperar el número total de registros en la tabla
  19.         $rows = mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() AS rows'));
  20.          // Pasar el número total de registros a la clase de paginación
  21.         $pagination->records($rows['rows']);
  22.          // Registros por página
  23.         $pagination->records_per_page($records_per_page);
  24.  $tabla = mysql_query($sql);
  25.  while ($registro = mysql_fetch_array($tabla)) {
  26.         ?>
  27.         <tr>
  28.           <td><a href="<?php echo $registro['Url']; ?>"><img border="0" src="<?php echo $registro['Imagenes']; ?>"></a></td>
  29.         </tr>
  30.         <?php
  31. }
  32.         ?>
  33.   </table>
lo único que nos interesa y que tratamos es esto:
Código MySQL:
Ver original
  1. FROM actividades
  2. WHERE actividades.Actividades = '$selactividad' and NombreComer like '%$txt_criterio%'
  3. AND idpoblacion =  $txt_selpoblacion
  4. LIMIT 0, 10
Todo el resto es "código basura", porque es off-topic y no permitido en este foro (estoy poniendole valores al LIMIT sólo como ejemplo).
Desde el punto de vista sintáctico, la sentencia está bien escrita, por lo que no debería generar problemas, en tanto los valores de las variables sean correctos.
Ahora bien, lo que expresas es que:
Cita:
con una variable le paso a mi consulta de Mysql una actividad para que me saque los datos que corresponde con esa actividad pero si le paso un dato como por ejemplo "TODOS" que es una Option del select, me saque los datos de todas las actividades.
Eso ya no es exactamente un problema de la sentencia de SQL, sino de la forma en que la creas con PHP (y en este punto volvemos a que no es asunto de este foro), porque lo que tienes que hacer es validar en la aplicación que si el usuario seleccionó esa opción del formulario, la condición
Código MySQL:
Ver original
  1. actividades.Actividades = '$selactividad'
no se incluya en el WHERE. Y como te remarco, aunque la sentencia finalmente es una consulta SQL, el problema es la implementación en el PHP...
El tema es que para crear una sentencia tal que incluya la opción de "todos" que quieres, el WHERE debería ser innecesariamente complicado, o crear un stored procedure que lo haga, mientras que en tu caso puees resolverlo de forma muy simple en el PHP... cosa que ya has demostrado con la condición del valor de idpoblacion. Lo único que debes hacer es lo mismo, pero para actividades.
La exclusión de una condición dada implica, en SQL, que se incluyen todos los valores que puedan existir en esa columna, sin discriminación, que es precisamente lo que estás tratando de conseguir.
¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)