慢位置搜索

时间:2013-12-24 12:03:13

标签: php mysql location

我有一个搜索功能的问题,它工作正常,但加载时间为14-18秒,这让我感到非常痛苦。

这是我正在使用的搜索功能:

$sql="select *, 
( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) ) )  AS distance 
  FROM postcodes,
       details 
 WHERE `postcode`=postcodes.outcode 
 HAVING " . implode(" AND ", $searches)." 
    AND isactive='y' 
 ORDER BY `distance`";

如果有人有任何建议他们都会受到欢迎


我花了更多的时间来处理它,并在添加更多信息之前准确理解查询正在做什么。

这是我现在更新的查询,我尝试使用左连接但我无法将邮政编码表加入cardetails表,当我将其反转时,cardetails列显示为null。

SELECT "column names",  
( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians(
`lng`   ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) )) 
AS       distance
FROM details
inner JOIN car_postcodes ON details.postcode =  postcodes.outcode AND
distance  < 100 AND payment='y' AND expired='n' ORDER BY     
details.price

这大大减少了执行查询所需的时间(大约6秒),所以我仍然需要改进它。

我现在遇到的问题是我无法使用列别名'distance'来测量用户与表格中字段之间的距离。因为我不能在where子句中使用列别名。

我似乎在许多其他帖子上看到的答案是子选择,

1 个答案:

答案 0 :(得分:0)

我不确定你在做什么,但以下行是可疑的

FROM postcodes,details

如果我没有弄错的话,这是一个crossjoin(如果你的桌子很大,这只会增加尺寸,最终会... ...我只是不确定你想要的是什么在这里)