0

t_dealer 包含dealer_name、dealer_state、dealer_postcode t_postcodes 包含p1、p2、dist 查找距离时,我始终必须确保较低的(数字)邮政编码是p1,较高的邮政编码是p2(除非它们相等)。

前置问题:如果客户浏览网站并输入(例如)3000 的邮政编码,我如何进行加入(或我需要做的任何其他事情)以保持距离?

这并不难,我知道 - 做

if($postcode>$dealer_postcode){

  $query="select dist from t_postcodes where p1=$dealer_postcode and p2=$postcode limit 1";

} else {

  $query="select dist from t_postcodes where p2=$dealer_postcode and p1=$postcode limit 1";

}

实际问题:我需要将州内的所有经销商 (dealer_state) 列在一个表中(使用 jqgrid),这意味着我需要 1 个查询来提取所有经销商及其与 $postcode 的各自距离。

我尝试了各种连接和东西,但都没有接近。

感谢您的时间。

4

2 回答 2

0

这是答案的第一部分:

select dist,p1,p2,dealer_postcode from t_dealer, t_postcodes where (if(dealer_postcode<$user_postcode,p1,p2)=dealer_postcode) and (if(dealer_postcode<$user_postcode,p2,p1)=$user_postcode)

我主要是从这个页面(关于子查询)得到的。

第二部分——让它运行而不会超时或花费太长时间的唯一方法——是限制结果。我最初有大约 2100 个经销商。我将它(通过其他标准)限制为 30,然后它运行正常

于 2012-06-20T18:55:14.640 回答
0

我使用以下文章为另一个项目(请注意它是 ZipCodes)做了类似的事情。您可以采用相同的原则并将它们应用于邮政编码。

使用 MySQL 的邮政编码半径搜索

于 2012-06-20T03:27:30.520 回答