当前位置: 首页 > 知识库问答 >
问题:

PHP MySQL语句-"选择为"与"在哪里"

东方旭东
2023-03-14

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

$query=sprintf(“选择公司名称、地址、电话、传真、联系人、电子邮件、网站、url、纬度、经度,(1.609344*3959*acos(弧度(“$center\u lat”)*cos(弧度(纬度))*cos(弧度(经度)-弧度(“$center\u lng”))sin(弧度(“$center\u lat”)*sin(弧度(纬度)))作为与cmsms_module_compdir_公司的距离,其中status='published'和latitude!=''和longitude!=''按距离限制5''排序,
mysql_real_escape_字符串($center_lat),
mysql_real_escape_字符串($center_lat));

但是,我想将结果限制在距离客户所在地X范围内的商店,比如50公里。我想我可以在下面加粗一点:

$query=sprintf(“选择公司名称、地址、电话、传真、联系人、电子邮件、网站、url、纬度、经度,(1.609344*3959*acos(弧度(“$center\u lat”)*cos(弧度(纬度))*cos(弧度(经度)-弧度(“$center\u lng”))sin(弧度(“$center\u lat”)*sin(弧度(纬度)))作为与cmsms_模块_compdir_公司的距离,其中状态为“已发布”,纬度为“”,经度为“”,距离为“”

…但这根本不会返回任何结果。

有什么想法吗?

共有3个答案

司徒俊良
2023-03-14

您只能在ORDER BYGROUP BYHAVING中使用别名。在查询距离时使用HAVING

$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));
百里胜泫
2023-03-14

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

所以你应该使用

 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

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

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
高德水
2023-03-14

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

PLZ使用具有

where ....
having distance < 50

顺便说一句:距离的单位是公里?

 类似资料:
  • 问题内容: 有人可以将下面的代码重写为准备好的语句吗? 我正在尝试学习准备好的语句,但是从搜索时发现的许多示例中很难理解它的工作原理。我希望,如果我看到一些我熟悉的代码,可以将其重写为一条准备好的语句,它可能会点击我。请不要使用PDO,就我目前的知识水平而言,这太让我感到困惑了。谢谢。 问题答案: 您好ButterDog让我逐步引导您完成PDO。 步骤1) 创建一个名为connect.php的文件

  • 问题内容: 我在C#项目中将SQLServer用于故障排除程序,并且我有一个包含ID,Question,QuestionId,Solution和Rank的表。我希望有一个问题的多个解决方案,并且程序将选择排名最高的解决方案,该解决方案仅由最高的数字来选择,该数字在每次正确时都会递增。为此,我有以下SQL语句: 当我只有一个可用的解决方案时,它可以很好地工作,但是当我有多个解决方案时,它却不能。 问

  • 问题内容: 我正在浏览tour.golang.org中的示例,并且遇到了我不太了解的这段代码: 我了解通道工作的基础知识,但是我没有得到的是上述select语句的工作方式。教程中的说明说: “ select语句使goroutine等待多个通信操作。一个select阻塞直到它的一种情况可以运行,然后它执行该情况。如果有多个就绪,它将随机选择一个。” 但是案件如何执行?据我所知,他们在说: 案例:发送

  • 问题内容: 刚尝试去最近。我想知道如果您有一条select语句等待在几个通道上进行通信,并且如果消息同时在两个或多个通道上出现,将会发生什么情况。如果所有消息都同时发出,那么select将如何确定接受哪个通道? 谢谢! 问题答案: 从规格: 如果可能发生多种情况,则将做出统一的伪随机选择,以决定执行哪个单一通信。 因此,选择是不确定的。

  • 问题内容: 我基本上有两个名为和的表。该表具有以下字段: 是表中字段的外键,其中包含以下字段: 我正在运行这样的查询: 除其他事项外,这将返回用户的。但是我想返回用户的用户名,而不是他们的u_id。因此,基本上,在该SELECT语句中,我还想运行: 我可以为此使用两个查询,但是我试图减少我的应用程序运行的查询,而且我知道有一种方法可以将其组合成一个查询,但是我只是不知道:< 有人知道答案吗?谢谢!

  • 问题内容: 有什么办法可以在HQL中执行以下操作: 问题答案: 我想你可以(3.6,4.3) [联编辑] …对于那些子句: “简单”情况和“搜索”情况,