Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/05/2014, 20:27
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: 17 años, 2 meses
Puntos: 2658
Respuesta: Consulta en PHP, funciona en SQL phpmyadmin

Vamos por partes...
Si con el valor de la zona ($zona), esto:
Código MySQL:
Ver original
  1. SELECT codigo_postal
  2. FROM codigos_postales_zonas
  3. WHERE zona = '$zona';
te devuelve 30153, y con ese valor esto:
Código MySQL:
Ver original
  1. FROM comerciantes
  2. WHERE codigo_postal IN ('.$codigo_postal.');

te regresa los dos valores 78 y 79, y con eso, por medio de esto:
Código MySQL:
Ver original
  1. FROM ofertas
  2. WHERE id_comerciante IN ('.$ids.')
  3.       AND fecha_final > '$fecha_actual';

obtienes 14, esto debería funcionar igual, pero en una sola query:
Código MySQL:
Ver original
  1. SELECT count(*) TotalOfertas
  2.   FROM ofertas
  3. WHERE id_comerciante IN (SELECT ID
  4.                            FROM comerciantes
  5.                           WHERE codigo_postal IN (SELECT codigo_postal
  6.                                                     FROM codigos_postales_zonas
  7.                                                    WHERE zona = '$zona'))
  8.      AND fecha_final > '$fecha_actual';
y esta otra es semánticamente idéntica:
Código MySQL:
Ver original
  1.     O.id_comerciante, COUNT(*) TotalOfertas
  2.     ofertas O
  3.         INNER JOIN
  4.     comerciantes C ON O.id_comerciante = C.ID
  5.         INNER JOIN
  6.     codigos_postales_zonas CP ON CP.codigo_postal = C.codigo_postal
  7.     O.fecha_final > CURDATE()
  8.         AND CP.zona = '$zona'
  9. GROUP BY O.id_comerciante;

Y si las dos finales no te devuelven lo que buscas, entonces tienes una de dos situaciones: a) No tienes registros que cumplan la restricción indicada; b) tienes un error de datos (lo que solemos llamar "datos sucios").
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)