- Проблем при заявка...
WT форуми -> PHP MySQL ASP.NET -> Проблем при заявка...
Създайте нова тема Напишете отговор 
Автор Съобщение
Msecurity
Потребител
Потребител

Регистриран на: 18/09/2010 8:12 am

Support: 19
Bonus: 37
Мнения: 752
Мнение 10/08/2018 6:59 am     Проблем при заявка... Отговорете с цитат


Здравейте... дава ми че "колоната" не съществува... а то реално не е колона Very Happy
Unknown column 'distance' in 'where clause'

Ето я и самата заявка...
От къде може да идва проблема?
SQL code:
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']."
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 158
Bonus: 315
Мнения: 1472
Мнение 10/08/2018 7:58 am      Отговорете с цитат


distance Е колона, но не във вече съществуваща таблица, а резултата от селекта Laughing

Ето виж: 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, и ти не можеш да го използваш.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2178
Мнение 10/08/2018 8:12 am      Отговорете с цитат


Можеш да използваш или целия израз в WHERE клаузата или да направиш заявка от заявка:
SQL code:
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 code:
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']."
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2649
Мнение 10/08/2018 10:34 am      Отговорете с цитат


anonimen написа:

Предполагам, причината за това е, че условието в Where клаузата се прилага преди още да е започнало изчислението на колоните в Select-a. Т.е. в Where още няма distance, и ти не можеш да го използваш.


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

Регистриран на: 18/09/2010 8:12 am

Support: 19
Bonus: 37
Мнения: 752
Мнение 10/08/2018 1:46 pm      Отговорете с цитат


Благодаря много, стана перфектно Smile)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети