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

Select me da campos que no solicita la consulta

Estas en el tema de Select me da campos que no solicita la consulta en el foro de Mysql en Foros del Web. Hola, Tengo una consulta donde busca exposiciones en dos tablas: exposiciones y salasexposiciones y están filtradas por zona, en este caso Jaén : Código PHP: ...
  #1 (permalink)  
Antiguo 30/01/2010, 11:52
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Select me da campos que no solicita la consulta

Hola,

Tengo una consulta donde busca exposiciones en dos tablas: exposiciones y salasexposiciones y están filtradas por zona, en este caso Jaén:

Código PHP:
SELECT exposiciones.artistaexposiciones.tipoexposiciones.tituloexposiciones.fecha_inicio,  exposiciones.fecha_finexposiciones.hastaexposiciones.nombre_sala_exexposiciones.thumbnailexposiciones.urlexposiciones.preludio,  salasexposiciones.pueblodate_formatexposiciones.fecha_fin'%d/%m/%Y' )  AS Fechasalasexposiciones.zona
FROM exposiciones
salasexposiciones
WHERE salasexposiciones
.zona 'Jaén' AND salasexposiciones.nombre_sala_ex exposiciones.nombre_sala_ex AND (  exposiciones.fecha_inicio <= CURDATE( )  AND exposiciones.fecha_fin >= CURDATE( )  ) OR (  exposiciones.fecha_inicio >= CURDATE( )  AND exposiciones.fecha_inicio <= DATE_ADDCURDATE( ) ,  INTERVAL 15  DAY )  )
GROUP BY exposicion_id
ORDER BY exposiciones
.fecha_fin 
La consulta funciona bien excepto que me salen en cada ciudad las exposiciones que hay en Cuenca también.
Las de Cuenca salen bien.

¿Se os ocurre que puede estar pasando?
  #2 (permalink)  
Antiguo 30/01/2010, 12:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Select me da campos que no solicita la consulta

cambiala por esta

Código SQL:
Ver original
  1. SELECT exposiciones.artista, exposiciones.tipo, exposiciones.titulo, exposiciones.fecha_inicio,  exposiciones.fecha_fin, exposiciones.hasta, exposiciones.nombre_sala_ex, exposiciones.thumbnail, exposiciones.url, exposiciones.preludio,  salasexposiciones.pueblo, date_format( exposiciones.fecha_fin, '%d/%m/%Y' )  AS Fecha, salasexposiciones.zona
  2. FROM exposiciones INNER JOIN salasexposiciones ON salasexposiciones.nombre_sala_ex = exposiciones.nombre_sala_ex
  3. WHERE salasexposiciones.zona = 'Jaén' AND (  exposiciones.fecha_inicio <= CURDATE( )  AND exposiciones.fecha_fin >= CURDATE( )  ) OR (  exposiciones.fecha_inicio >= CURDATE( )  AND exposiciones.fecha_inicio <= DATE_ADD( CURDATE( ) ,  INTERVAL 15  DAY )  )
  4. GROUP BY exposicion_id
  5. ORDER BY exposiciones.fecha_fin

Es mejor y mas confiable anidar las tablas haciendo uso de sentencias join.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/01/2010, 12:30
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

Gracias huesos52 pero no me funciona. Sigue saliendome también la zona no deseada.
Me pregunto por que si hay algo mal solo sale la misma ciudad y no otra.

Tal vez tenga que volver a hacer la tabla porque la he hecho con acentos y espacios y seguro que es de eso ¿No crees?
  #4 (permalink)  
Antiguo 30/01/2010, 12:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Select me da campos que no solicita la consulta

Vaya problema mas raro.

Dices que en el campo zona de la tabla salaexposiciones que es el ultimo campo que muestras en la consulta y al cual le aplicas el filtro, te muestra los registros de jaén y cuenca? Si pones solo cuenca te sale solo cuenca?

Si es así, tal vez sea un problema de codificación de la base de datos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 30/01/2010, 12:52
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

La tengo codificada en utf8_spanish_ci
No hay que poner en todos los campos la codificacion ¿no?
  #6 (permalink)  
Antiguo 30/01/2010, 12:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Select me da campos que no solicita la consulta

No es necesario.

PD: No me respondiste la pregunta.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 30/01/2010, 12:59
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

Cita:
Iniciado por huesos52 Ver Mensaje

Dices que en el campo zona de la tabla salaexposiciones que es el ultimo campo que muestras en la consulta y al cual le aplicas el filtro, te muestra los registros de jaén y cuenca? Si pones solo cuenca te sale solo cuenca?
.
Si, así es.
  #8 (permalink)  
Antiguo 30/01/2010, 14:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Select me da campos que no solicita la consulta

Quizás el problema es que falta algún paréntesis de apertura
SELECT exposiciones.artista, exposiciones.tipo, exposiciones.titulo, exposiciones.fecha_inicio, exposiciones.fecha_fin, exposiciones.hasta, exposiciones.nombre_sala_ex, exposiciones.thumbnail, exposiciones.url, exposiciones.preludio, salasexposiciones.pueblo, date_format( exposiciones.fecha_fin, '%d/%m/%Y' ) AS Fecha, salasexposiciones.zona FROM exposiciones INNER JOIN salasexposiciones ON salasexposiciones.nombre_sala_ex = exposiciones.nombre_sala_ex WHERE salasexposiciones.zona = 'Jaén' AND ( ( exposiciones.fecha_inicio <= CURDATE( ) AND exposiciones.fecha_fin >= CURDATE( ) ) OR ( exposiciones.fecha_inicio >= CURDATE( ) AND exposiciones.fecha_inicio <= DATE_ADD( CURDATE( ) , INTERVAL 15 DAY ) ) GROUP BY exposicion_id ORDER BY exposiciones.fecha_fin

He añadido un paréntesis, en negrita.
  #9 (permalink)  
Antiguo 30/01/2010, 15:10
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

Gracias, Jurena, pero me da un error.

Lo que me he dado cuenta es que si en vez de Jaén pongo cualquier nombre que no exista (Tengo todas las provincias en ENUM) me salen solo los registros del problema. O sea, que ponga lo que ponga me salen los de Cuenca (los erróneos) siempre.

No se que que narices puede ser...
  #10 (permalink)  
Antiguo 30/01/2010, 15:48
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: Select me da campos que no solicita la consulta

Yo, por más que reviso la consulta no veo problemas de lógica (fuera de no usar funciones específicas en algunas partes), por lo que sugeriría un experimento.
Dinos qué es lo que devuelve cada una de las siguientes consultas, para ver si detectamos a partir de qué punto los resultados son incorrectos:
Consulta 1:
Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   date_format(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17. GROUP BY E.exposicion_id
  18. ORDER BY E.fecha_fin;
Consulta 2:
Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   date_format(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17.   AND  (E.fecha_inicio <= CURDATE() AND E.fecha_fin >= CURDATE())
  18. GROUP BY E.exposicion_id
  19. ORDER BY E.fecha_fin;
Consulta 3:
Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   date_format(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17.   AND
  18.       (E.fecha_inicio BETWEEN CURDATE() AND DATE_ADD(CURDATE() , INTERVAL 15 DAY )
  19. GROUP BY E.exposicion_id
  20. ORDER BY E.fecha_fin;
Consulta 4:
Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   date_format(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17.   AND
  18.     ((E.fecha_inicio <= CURDATE() AND E.fecha_fin >= CURDATE())
  19.       OR
  20.       (E.fecha_inicio BETWEEN CURDATE() AND DATE_ADD(CURDATE() , INTERVAL 15 DAY ))
  21. GROUP BY E.exposicion_id
  22. ORDER BY E.fecha_fin;

Este tipo de pruebas lo suelo hacer cuando algún problema de lógica se escapa a la observación de la consulta. Muchas veces tiene que ver con la forma en que MySQL realiza el parseo y que no podemos detectar a simple vista.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 30/01/2010, 16:05
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

gnzsoloyo, El 1 el 2 me funciona bien.

En el 3 y el 4 me da estos errores:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY E.exposicion_id ORDER BY E.fecha_fin LIMIT 0, 30' at line 22

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY E.exposicion_id ORDER BY E.fecha_fin LIMIT 0, 30' at line 24
  #12 (permalink)  
Antiguo 30/01/2010, 17:05
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: Select me da campos que no solicita la consulta

Le faltaba un paréntesis...
Consulta 3:
Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   DATE_FORMAT(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17.   AND
  18.       (E.fecha_inicio BETWEEN CURDATE() AND DATE_ADD(CURDATE() , INTERVAL 15 DAY ))
  19. GROUP BY E.exposicion_id
  20. ORDER BY E.fecha_fin;

Consulta 4:

Código MySQL:
Ver original
  1.   E.artista,
  2.   E.tipo,
  3.   E.titulo,
  4.   E.fecha_inicio,
  5.   E.fecha_fin,
  6.   E.hasta,
  7.   E.nombre_sala_ex,
  8.   E.thumbnail,
  9.   E.url,
  10.   E.preludio,
  11.   S.pueblo,
  12.   DATE_FORMAT(E.fecha_fin, '%d/%m/%Y') Fecha,
  13.   S.zona
  14.   exposiciones E
  15.   INNER JOIN salasexposiciones S ON E.nombre_sala_ex = S.nombre_sala_ex
  16.   S.zona = 'Jaén'
  17.   AND
  18.     ((E.fecha_inicio <= CURDATE() AND E.fecha_fin >= CURDATE())
  19.       OR
  20.      (E.fecha_inicio BETWEEN CURDATE() AND ADDDATE(CURDATE() , INTERVAL 15 DAY )))
  21. GROUP BY E.exposicion_id
  22. ORDER BY E.fecha_fin;

Si se vuelve a producir un error de sintaxis, revisalas y verifica que esté todo bien. No esperes a mi respuesta, con eso perdemos tiempo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 30/01/2010, 17:16
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

Gracias, gnzsoloyo pero no consigo saber que es.

La 3 me da un registro vacío y la 4 me lo da correcto.
  #14 (permalink)  
Antiguo 30/01/2010, 17:37
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: Select me da campos que no solicita la consulta

Bien, si la 3 te devuelve un registro vacío, simplemente significa que no hay exposiciones programadas para iniciar en los próximos 15 días en Jaén. Nada más.
El hecho de que la 4 funcione significa que ha exposiciones ya iniciadas que aún continúan. Esto era esperable porque la 2, que contiene la misma condición común, te estaba dando resultados, de modo que sólo una condición se estaba cumpliendo. Si las comparas, debería devolver los mismos resultados.

Ahora habría que probar qué pasa cuando pones en cada caso una zona diferente. SI el resultado sigue siendo correcto, entonces lo único que estaba funcionando mal era el uso de >= y <= en la misma condición.

Prueba con "Cuenca" o alguna otra. Haz dos pruebas, una con una ciudad de la que haya datos y otra que no exista. La segunda no debería devolver datos en ningún caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 31/01/2010, 02:04
 
Fecha de Ingreso: abril-2004
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respuesta: Select me da campos que no solicita la consulta

gnzsoloyo, me has salvado la vida. Ha funcionado perfecto.

Muchas gracias a todos.
  #16 (permalink)  
Antiguo 31/01/2010, 06:03
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: Select me da campos que no solicita la consulta

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, select
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 04:15.