【发布时间】:2016-01-10 22:03:48
【问题描述】:
我正在用 PHP 和 MYSQL 建立一个网站。
我正在尝试首先按最近的位置对搜索结果进行排序。我有一个项目表和一个交易表。我需要在这两个表中搜索项目/交易位置,然后将位置与我的邮政编码数据库进行比较,并从相应的数据库条目中获取纬度和经度并对结果进行排序。我正在使用 PDO 准备好的语句。
我的数据库中有 3 个表。邮政编码、优惠和商品。
邮政编码
| postcode | lat | lng |
交易
| id | title | location |
物品
| id | title | location |
这是我的 SQL...
SELECT SQL_CALC_FOUND_ROWS *
FROM (
SELECT *
FROM items
UNION
SELECT * FROM deals
) AS allitemsdeals
INNER JOIN (
SELECT
postcodes.*,
(3959 * acos(cos(radians(custom.lat)) * cos(radians(postcodes.lat)) * cos(radians(custom.lng) - radians(postcodes.lng)) + sin(radians(custom.lat)) * sin(radians(postcodes.lat)))
) AS distance
FROM postcodes
INNER JOIN postcodes AS custom
WHERE custom.postcode = ?
) postcodes ON allitemsdeals.location = postcodes.postcode
HAVING distance < 5 ORDER BY id LIMIT ? OFFSET ?
我的加入有问题。查询有效,但大约需要一分钟! :(
任何帮助将不胜感激!谢谢! :)
【问题讨论】:
-
ST_Within 可能会加快速度,但如果不查看您的解释输出,则只能猜测。请更新您的问题,而不是发布 PHP,而是发布实际执行的 sql 查询。并指出您的表格是什么样的以及它们的行数是多少
-
感谢您的回复。该问题已通过示例进行了更新。 :)
-
仍然需要解释输出。
标签: php mysql geocoding latitude-longitude