Vamos por partes...
Si con el valor de la zona ($zona), esto:
te devuelve
30153, y con ese valor esto:
te regresa los dos valores 78 y 79, y con eso, por medio de esto:
obtienes 14, esto debería funcionar igual, pero en una sola query:
y esta otra es semánticamente idéntica:
Código MySQL:
Ver original O.id_comerciante
, COUNT(*) TotalOfertas
ofertas O
comerciantes C
ON O.id_comerciante
= C.ID
codigos_postales_zonas CP
ON CP.codigo_postal
= C.codigo_postal
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").