我有一个搜索功能的问题,它工作正常,但加载时间为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子句中使用列别名。
我似乎在许多其他帖子上看到的答案是子选择,
答案 0 :(得分:0)
我不确定你在做什么,但以下行是可疑的
FROM postcodes,details
如果我没有弄错的话,这是一个crossjoin
(如果你的桌子很大,这只会增加尺寸,最终会... ...我只是不确定你想要的是什么在这里)