经度纬度查询但只有与同一表中的列匹配的行

时间:2016-04-11 05:45:36

标签: mysql distance having-clause

我看了看,试了试过但没有成功。我有一个查询,用于显示特定距离范围内的用户。它工作得很好,但它返回我users表中的所有用户,我希望它只返回account_type中的值等于' 1'的用户。所以基本上不同类型的帐户类型共享我的用户表,在这个页面上我只想要显示一种类型的用户。我尝试过各种各样的事情,包括加入我认为没有意义的同一张桌子,无论如何它都没有用。 基本上,我想知道在这个查询中我可以添加一个' WHERE'用于检查名为' account_type'。

的列的子句

这是我的功能查询:

SELECT `user_id`, ( 3959 * acos( cos( radians('".$lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$lng."') ) + sin( radians('".$lat."') ) * sin( radians( lat ) ) ) )  AS distance FROM users   HAVING distance <= '".$dist."'  ORDER BY distance

由于我只想从该表中返回account_type = 1的用户,因此我尝试了以下几种不同的变体,但没有成功:

SELECT `user_id`, `account_type`, ( 3959 * acos( cos( radians('".$lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$lng."') ) + sin( radians('".$lat."') ) * sin( radians( lat ) ) ) )  AS distance FROM users   ***WHERE `account_type` = '1'*** HAVING distance <= '".$dist."'  ORDER BY distance

SELECT `user_id`, `account_type`, ( 3959 * acos( cos( radians('".$lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$lng."') ) + sin( radians('".$lat."') ) * sin( radians( lat ) ) ) )  AS distance FROM users   HAVING distance <= '".$dist."'  ***WHERE `account_type` = '1'*** ORDER BY distance
尽管我还没有进一步污染这个话题,但还有很多其他人。有人可以告诉我我做错了什么吗?谢谢

1 个答案:

答案 0 :(得分:0)

@rhavendc是对的。我是个白痴。我创建的用于测试此帐户的帐户我使用了一些远处的位置,虽然我的网站上有超过20个测试帐户,但在我的测试帐户使用的疯狂位置的100英里内没有一个匹配account_type ='1 “

所以,一旦我意识到只需2秒钟就可以使用此查询来获得正确的结果

$ qry =“SELECT user_id,(3959 * acos(cos(radians('”。$ lat。“'))* cos(弧度(纬度))* cos(弧度(lng) - 弧度('“。$ lng。”'))+ sin(弧度('“。$ lat。”'))* sin(弧度(纬度))))AS距离用户WHERE account_type ='1'HAVING distance&lt; ='“。$ dist。”'按距离排序“;

感谢大家的投入。我为自己的愚蠢而道歉。