Проблем при заявка...

Msecurity

Registered
Здравейте... дава ми че "колоната" не съществува... а то реално не е колона :D
Код:
Unknown column 'distance' in 'where clause'
Ето я и самата заявка...
От къде може да идва проблема?
[sql]SELECT *,(((acos(sin((".$data['lat']."*pi()/180)) * sin((".$column['lat']."*pi()/180))+cos((".$data['lat']."*pi()/180)) * cos((".$column['lat']."*pi()/180)) * cos(((".$data['long']."-".$column['long'].")*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance
FROM ".$table." WHERE distance >= ".$data['distance']."[/sql]
 
distance Е колона, но не във вече съществуваща таблица, а резултата от селекта :lol:

Ето виж: https://stackoverflow.com/questions/27503379/use-a-calculated-column-in-a-where-clause

А тук е даста по-просто попитано и обяснено как може да се постигне желаният резултат: https://stackoverflow.com/questions/41693097/reuse-calculated-column-in-where-clause

А тук: https://stackoverflow.com/questions/9720790/referencing-a-calculated-column-in-the-where-clause-sql човекът си казва:

You can't reference an alias anywhere except ORDER BY.

Предполагам, причината за това е, че условието в Where клаузата се прилага преди още да е започнало изчислението на колоните в Select-a. Т.е. в Where още няма distance, и ти не можеш да го използваш.
 
Можеш да използваш или целия израз в WHERE клаузата или да направиш заявка от заявка:
[sql]WHERE (((acos(sin((".$data['lat']."*pi()/180)) * sin((".$column['lat']."*pi()/180))+cos((".$data['lat']."*pi()/180)) * cos((".$column['lat']."*pi()/180)) * cos(((".$data['long']."-".$column['long'].")*pi()/180))))*180/pi())*60*1.1515*1.609344) >= ".$data['distance']."[/sql]

[sql]SELECT * FROM (SELECT *,(((acos(sin((".$data['lat']."*pi()/180)) * sin((".$column['lat']."*pi()/180))+cos((".$data['lat']."*pi()/180)) * cos((".$column['lat']."*pi()/180)) * cos(((".$data['long']."-".$column['long'].")*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance

FROM ".$table.") t1 WHERE t1.distance >= ".$data['distance']."[/sql]
 
anonimen каза:
Предполагам, причината за това е, че условието в Where клаузата се прилага преди още да е започнало изчислението на колоните в Select-a. Т.е. в Where още няма distance, и ти не можеш да го използваш.

Нещо такова. SELECT-а се изпълнява върху готов set от информация. За да се изчисли този set, трябва да се приложи - join/where/group by/having, etc. :?:
 

Горе