首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL语句- "select as“和"where”

MySQL语句- "select as“和"where”
EN

Stack Overflow用户
提问于 2012-12-02 15:52:35
回答 3查看 3.8K关注 0票数 0

我有下面的SQL语句,它从数据库中选择公司(带有存储的lat/lng),并显示离客户位置最近的5个位置。这是非常有效的:

$query =sprintf(“选择company_name、地址、电话、传真、contact_email、网站、网址、纬度、经度、(1.609344 * 3959 * acos( cos(弧度(‘.$center_lat.“)))* cos(弧度(纬度))* cos(弧度(经度)-弧度(’.$center_lng.‘))+ sin(弧形(’.$center_lat.‘)* sin(弧度(纬度))与cmsms_module_compdir_companies的距离(状态=’发布‘和纬度!=’和‘经度!=’按距离限制5‘排序! mysql_real_escape_string($center_lat) mysql_real_escape_string($center_lng) Mysql_real_escape_string($center_lat);

但是,我只想把结果限制在离客户位置的X距离以内的那些商店,比如50公里处。我想我可以在下面加黑体字:

$query =sprintf(“选择company_name、地址、电话、传真、contact_email、网站、网址、纬度、经度、(1.609344 * 3959 * acos( cos(弧度(‘.$center_lat.“)))* cos(弧度(纬度))* cos(弧度(经度)-弧度(’.$center_lng.‘))+ sin(弧形(’.$center_lat.‘)* sin(弧度(纬度))与cmsms_module_compdir_companies的距离(状态=’发布‘和纬度!=’‘和经度!='‘和距离<’50‘顺序按距离限制5 ",mysql_real_escape_string($center_lat) mysql_real_escape_string($center_lng) Mysql_real_escape_string($center_lat);

...but --这根本不返回任何结果。

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-02 16:00:12

不能在distance条件下使用计算值where

请使用having

代码语言:javascript
复制
where ....
having distance < 50

顺便问一下:距离的单位是公里?

票数 4
EN

Stack Overflow用户

发布于 2012-12-02 16:00:49

不能在WHERE子句中使用列别名。

所以你应该用

代码语言:javascript
复制
 WHERE (1.609344 * 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( latitude ) ) ) ) < 50

或添加查询选择为表(未测试,请耐心)

代码语言:javascript
复制
SELECT tmpt.distance, company_name, address, telephone, fax, contact_email, website, url, latitude, longitude, 
   FROM (SELECT *your expression* FROM table_name) AS tmpt, 
   cmsms_module_compdir_companies
   WHERE  status='published' AND latitude!='' AND longitude!='' AND distance<'50' ORDER BY distance limit 5
票数 0
EN

Stack Overflow用户

发布于 2012-12-02 16:05:38

您只能在ORDER BYGROUP BYHAVING子句中使用别名。在查询HAVING中使用distance,使用代码如下所示:

代码语言:javascript
复制
$query = sprintf("SELECT company_name, address, telephone, fax, contact_email, website, url, latitude, longitude, (1.609344 * 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( latitude ) ) ) ) AS distance FROM cmsms_module_compdir_companies WHERE status='published' AND latitude!='' AND longitude!='' HAVING  distance<50 ORDER BY distance limit 5 ", mysql_real_escape_string($center_lat),
    mysql_real_escape_string($center_lng),
    mysql_real_escape_string($center_lat));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13670911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档