Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema en una consulta con Where

Estas en el tema de Problema en una consulta con Where en el foro de Mysql en Foros del Web. Bueno tengo un problemilla en una consulta con el Where, hasta ahora funcionaba bien tal como lo tenia pero resulta que he añadido un select ...
  #1 (permalink)  
Antiguo 10/03/2012, 15:40
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema en una consulta con Where

Bueno tengo un problemilla en una consulta con el Where, hasta ahora funcionaba bien tal como lo tenia pero resulta que he añadido un select que me selecciona una actividad del campo de una tabla y luego lo paso a una variable ($selactividad) y la utilizo en la consulta en Where para mostrar los datos que coinciden.
En dicho select que se rellena con el campo de una tabla tengo una:
Código HTML:
Ver original
  1. <option value="" selected>Seleccionar Actividad</option>
y lo que quiero es que al seleccionar esta opción me saque en la consulta los datos de todas las actividades y cuando selecciono una actividad me saque los datos de solo esa actividad.
la verdad es que no se ahora mismo como hacerlo se que no es complicado pero no veo la manera he probado de todo y he mirado en la red y en los foros, a lo mejor es que estoy cansado.

Pongo el codigo de la consulta para ver si esta hay el problema
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.  
  13.  // Si la consulta no puede ser ejecutada
  14.         if (!($result = @mysql_query($sql))) {
  15.  
  16.         // Parada de la ejecución y el mensaje de error de visualización
  17.             die(mysql_error());
  18.  
  19.         }
  20.        
  21.  
  22.         // Recuperar el número total de registros en la tabla
  23.         $rows = mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() AS rows'));
  24.  
  25.         // Pasar el número total de registros a la clase de paginación
  26.         $pagination->records($rows['rows']);
  27.  
  28.         // Registros por página
  29.         $pagination->records_per_page($records_per_page);
  30.  
  31. $tabla = mysql_query($sql);
  32.  
  33. while ($registro = mysql_fetch_array($tabla)) {
  34.         ?>
  35.         <tr>
  36.           <td><a href="<?php echo $registro['Url']; ?>"><img border="0" src="<?php echo $registro['Imagenes']; ?>"></a></td>
  37.         </tr>
  38.        
  39.         <?php
  40. }
  41.         ?>
  42.        
  43.   </table>

Como he dicho si selecciono una actividad funciona bien lo que quiero es que al no seleccionar nada cuando entras en la página o al seleccionar:
<option value="" selected>Seleccionar Actividad</option>
me saque todas las actividades.

Perdonar si he sido redundante en la esplicación pero pretendo que se entienda.

Gracias por vuestra ayuda y un saludo.
  #2 (permalink)  
Antiguo 10/03/2012, 15:46
 
Fecha de Ingreso: febrero-2012
Ubicación: Bilbao
Mensajes: 33
Antigüedad: 12 años, 2 meses
Puntos: 3
Pregunta sí la variables es diferente de espacio, sí es espacio quitas esa condición del select
  #3 (permalink)  
Antiguo 10/03/2012, 16:20
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Problema en una consulta con Where

Cita:
Iniciado por ima_creste Ver Mensaje
Pregunta sí la variables es diferente de espacio, sí es espacio quitas esa condición del select
Eso es relativo.
En todos los lenguajes de programación que conozco un espacio (" ") no es lo mismo que espacio vacío (""), y tampoco es lo mismo que nulo (NULL).
De todos modos eso no es asunto de MySQL, sino de programación en PHP (en tu caso), y esas cosas se resuelven en el Foro de PHP. En este foro las normas prohíben tratar asuntos de programación ni postear códigos de programación.
Acá el tema es la parte de SQL, que no es un lenguaje de programación.

Además, hay muchos métodos mejores en PHP para lograr esa validación, pero eso lo conocen bien los que están en ese foro, y no en este. Acá muchos de nosotros no trabajamos en PHP, sino en otros lenguajes, cuando no sólo en SQL.

Para la próxima fijate dónde aparece el problema: Si es que MySQL te devuelve un error de sintaxis, o tienes problemas con los datos devueltos, eso va acá. todo el resto no.

Saludos y suerte con el proyecto.
:)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 10/03/2012, 19:03
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema en una consulta con Where

Bueno chicos no se si me estais contestando a mi o estais enfrascados con un tema propio vuestro.

1) Mi problema es como plantear una consulta de una base de datos Mysql, por lo tanto estoy en el foro correcto y no planteo nada que tenga que ver ni con programación ni con PHP.

2) gnzsoloyo tal como me dices "Si tienes problemas con los datos devueltos, eso va acá. todo el resto no" pues me atengo a lo dicho es justamente un problema de una consulta Mysql, lo de "todo el resto no", no lo entiendo porque yo no he planteado nada mas.

3) ima_creste yo no pregunto si las variables es diferente de espacio, por lo tanto no entiendo tu respuesta.

RESUMO: 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.

Directamente lo puedo hacer cambiando esto:_
Código MySQL:
Ver original
  1. WHERE actividades.Actividades = '$selactividad'
Por esto otro:
Código MySQL:
Ver original
  1. WHERE actividades.Actividades <> 'PEPE'
Donde pregunto si Actividad es diferente a PEPE me saque todas las que son diferentes, como no hay ninguna actividad que se llame PEPE me las saca todas.

He intentado hacer un If en Where pero no lo he conseguido.

Un saludo a los dos.
  #5 (permalink)  
Antiguo 10/03/2012, 20:12
Avatar de 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, 4 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)
  #6 (permalink)  
Antiguo 11/03/2012, 03:09
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema en una consulta con Where

Ahora si estoy de acuerdo contigo Gracias.

Cuando lo solucione os lo dire.

Un saludo.
  #7 (permalink)  
Antiguo 12/03/2012, 03:30
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema en una consulta con Where

gnzsoloyo gracias por tu aclaración.

Veras la cuestion es que despues de varias horas no se como hacerlo he probado de todo y tampoco puedo poner esta misma consulta en el foro de PHP porque si lo hago cometere una infracción, necesito solucionarlo y la verdad es que estoy perdido, puedes ayudarme.

Un saludo y gracias.
  #8 (permalink)  
Antiguo 12/03/2012, 07:40
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Problema en una consulta con Where

Estoy mandandote un boceto de cómo lo pondría yo por MP, ya que el problema es off-topic.
Luego me comentas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 13/03/2012, 05:55
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema en una consulta con Where

gnzsoloyo.

Sigue sin funcionar correctamente porque funciona exactamente igual que antes, te he mandado por MP el código con algunas correcciones de sintaxis y te hago un par de preguntas en el mismo.

Etiquetas: php, query, registros, select, sql, tabla, campos
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:38.