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

Error al agregar WHERE

Estas en el tema de Error al agregar WHERE en el foro de Mysql en Foros del Web. Estimados, hice esta query que funciona muy bien: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT a. * , u.username , f.name , ( SELECT ( ...
  #1 (permalink)  
Antiguo 08/01/2013, 17:18
 
Fecha de Ingreso: noviembre-2009
Mensajes: 381
Antigüedad: 14 años, 4 meses
Puntos: 6
Error al agregar WHERE

Estimados, hice esta query que funciona muy bien:

Código MySQL:
Ver original
  1. SELECT a.*, u.username, f.name,
  2. (
  3. ACOS(SIN(RADIANS(".$lat.")) * SIN(RADIANS(a.lat)) +    
  4. COS(RADIANS(".$lat.")) * COS(RADIANS(a.lat)) *
  5. COS(RADIANS(".$lng.") - RADIANS(a.lng))) * 6378
  6. )    
  7. )AS distancia
  8.  
  9. FROM store_profiles a
  10. INNER JOIN users u ON (u.id = a.user_id)
  11. INNER JOIN files f ON (f.id = a.logo)
  12. ORDER BY distancia ASC

Ahora necesito agregarle lo siguiente:

Código MySQL:
Ver original
  1. WHERE distancia <= 10

Y me da el siguiente error:

Query : SELECT a.*, u.username, f.name, (SELECT ( ACOS(SIN(RADIANS(-38.9476583)) * SIN(RADIANS(a.lat)) + COS(RADIANS(-38.9476583...
Error Code : 1054
Unknown column 'distancia' in 'where clause'
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000


Alguna ayuda para solucionar esto?
El WHERE lo estoy agregando entre el ultimo INNER JOIN y el ORDER

Muchas gracias,
Gustav.
  #2 (permalink)  
Antiguo 08/01/2013, 21:31
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: 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)
  #3 (permalink)  
Antiguo 08/01/2013, 21:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 381
Antigüedad: 14 años, 4 meses
Puntos: 6
Respuesta: Error al agregar WHERE

Hola, y muchisimas gracias, no sabía que no podía usar WHERE con un alias creado.

Te dejo un gran saludo.
Gustav.

Etiquetas: 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 00:17.