Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/01/2013, 21:31
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Error al agregar WHERE

Cita:
Ahora necesito agregarle lo siguiente:
Código MySQL:
Ver original
  1. WHERE distancia <= 10
Lamento decírtelo, pero simplemente no puedes hacerlo...

Explico brevemente: Una regla que se aplica en todos los DBMS es que no se pueden usar en el WHERE los alias creados en el SELECT en la misma sentencia.
Ningún DBMS lo acepta. Sólo se pueden usar alias de las tablas, pero jamás de las columnas del SELECT.
Para lograr eso deberías transformar todo ese select en una subconsulta, y entonces, como se transforma en una tabla derivada, recién allí podrías hacerlo.
Es decir:
Código MySQL:
Ver original
  1.         a.*,
  2.         u.username,
  3.         f.name,
  4.         (ACOS(SIN(RADIANS(".$lat.")) * SIN(RADIANS(a.lat)) + COS(RADIANS(".$lat.")) * COS(RADIANS(a.lat)) * COS(RADIANS(".$lng.") - RADIANS(a.lng))) * 6378) distancia
  5.     FROM
  6.         store_profiles a INNER JOIN users u ON (u.id = a.user_id)
  7.         INNER JOIN files f ON (f.id = a.logo)) T1
  8. WHERE distancia <= 10
  9. ORDER BY distancia ASC
O bien puedes volver a realizar el cálculo y verificar el resultado en el WHERE:
Código MySQL:
Ver original
  1.     a.*,
  2.     u.username,
  3.     f.name,
  4.     (ACOS(SIN(RADIANS(".$lat.")) * SIN(RADIANS(a.lat)) + COS(RADIANS(".$lat.")) * COS(RADIANS(a.lat)) * COS(RADIANS(".$lng.") - RADIANS(a.lng))) * 6378) distancia
  5.     store_profiles a INNER JOIN users u ON (u.id = a.user_id)
  6.     INNER JOIN files f ON (f.id = a.logo)
  7. WHERE (ACOS(SIN(RADIANS(".$lat.")) * SIN(RADIANS(a.lat)) + COS(RADIANS(".$lat.")) * COS(RADIANS(a.lat)) * COS(RADIANS(".$lng.") - RADIANS(a.lng))) * 6378)  <= 10
  8. ORDER BY distancia ASC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)