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

[SOLUCIONADO] Problema con select dentro de where

Estas en el tema de Problema con select dentro de where en el foro de Mysql en Foros del Web. Buenas noches, tengo esta busqueda de eventos con reservas activas con un campo limite de reservas, y por otro lado la tabla reservas para saber ...
  #1 (permalink)  
Antiguo 28/10/2013, 17:27
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Problema con select dentro de where

Buenas noches, tengo esta busqueda de eventos con reservas activas con un campo limite de reservas, y por otro lado la tabla reservas para saber cuantas reservas ya se han hecho de el evento en cuestión y saber si a sobrepasado el número para sacarlo o no. Mi problema reside en que si no tengo reservas de ese evento, mi subconsulta que hago en el WHERE, acaba null en vez de un numero y por lo tanto no la hace.

Que tendria que hacer para solucionarlo? Un saludo y gracias por la ayuda de antemano!!

Código SQL:
Ver original
  1. SELECT DISTINCT ev.ev_id
  2.                             FROM eventos ev
  3.                             LEFT JOIN reservas res ON ev_id = res_evento
  4.                             WHERE
  5.                                 (
  6.                                 SELECT SUM(res_cantidad) cantidad
  7.                                 FROM eventos ev
  8.                                 LEFT JOIN reservas res ON ev_id = res_evento
  9.                                 WHERE ev_activo =1
  10.                                 AND ev_reservas =1
  11.                                 AND ev_reservas_cerradas =0
  12.                                 AND (CONCAT( ev_reservas_fecha_fin, ' ', ev_reservas_hora_fin ) >= NOW())
  13.                                 AND ev_fecha >= CURDATE( )
  14.                                 ) < ev.ev_reservas_limite
  15.                             AND ev_activo =1
  16.                             AND ev_reservas =1
  17.                             AND ev_reservas_cerradas =0
  18.                             AND (CONCAT( ev_reservas_fecha_fin, ' ', ev_reservas_hora_fin ) >= NOW( ))
  19.                             AND ev_fecha >= CURDATE( )
  20.                             ORDER BY ev_fecha ASC
  #2 (permalink)  
Antiguo 29/10/2013, 02:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con select dentro de where

Creo que te complicas mucho la vida....

Para estar seguro debería ver los CREATE de las tablas, o que pongas el alias de las tablas delante del nombre de los TODOS los campos, pero creo que esto funcionará

Código MySQL:
Ver original
  1. SELECT ev.ev_id
  2. FROM eventos ev
  3.     LEFT JOIN (SELECT res.res_evento,SUM(res.res_cantidad) cantidad
  4.                  FROM  reservas res
  5.                  WHERE CONCAT( res.ev_reservas_fecha_fin, ' ', res.ev_reservas_hora_fin ) >= NOW( )
  6.                  GROUP BY res.res_evento) sbc ON ev.ev_id = sbc.res_evento
  7. WHERE ifnull(sbc.cantidad,0) < ev.ev_reservas_limite
  8.       AND ev.ev_activo =1
  9.       AND ev.ev_reservas =1
  10.       AND ev.ev_reservas_cerradas =0
  11.       AND ev.ev_fecha >= CURDATE( )
  12. ORDER BY ev.ev_fecha ASC

Como no pones alias no se si

res.ev_reservas_fecha_fin
res.ev_reservas_hora_fin

estan en reservas o en eventos... fecha y hora fin de una reserva debería estar en reservas....????
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 29/10/2013, 02:46
 
Fecha de Ingreso: septiembre-2009
Mensajes: 27
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema con select dentro de where

En efecto! la fecha hora fin era en eventos, pero ya lo he cambiado al WHERE de abajo y parece que ahora funciona todo, haré las pertinentes pruebas para comprobarlo y cerciorarme, pero muchísimas gracias por tu ayuda :D

Código SQL:
Ver original
  1. SELECT ev.ev_id
  2.     FROM eventos ev
  3.         LEFT JOIN (SELECT res.res_evento,SUM(res.res_cantidad) cantidad
  4.                      FROM  reservas res
  5.                      GROUP BY res.res_evento) sbc ON ev.ev_id = sbc.res_evento
  6.     WHERE ifnull(sbc.cantidad,0) < ev.ev_reservas_limite
  7. AND CONCAT( ev.ev_reservas_fecha_fin, ' ', ev.ev_reservas_hora_fin ) >= NOW( )
  8.           AND ev.ev_activo =1
  9.           AND ev.ev_reservas =1
  10.           AND ev.ev_reservas_cerradas =0
  11.           AND ev.ev_fecha >= CURDATE( )
  12.     ORDER BY ev.ev_fecha ASC

Etiquetas: null, subconsulta
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 03:18.