我正在用PHP和MYSQL构建一个网站。从邮政编码数据库获取纬度/经度,并在PHP/MYSQL中以最接近的顺序排列
我想按最近的位置先搜索结果。我有一个物品表和一个交易表。我需要在这些表格中搜索物品/交易地点,然后将该地点与我的邮政编码数据库进行比较,并从相应的数据库条目中获取纬度和经度并对结果进行排序。我正在使用PDO准备的语句。
我在我的数据库中有3个表。邮编,交易和物品。
邮政编码
| postcode | lat | lng |
特价
| id | title | location |
ITEMS
| 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查询。并且还指出你的表是什么样的,他们的行数是多少 – e4c5
感谢您的回复。这个问题已经用例子更新了。 :) – Goldberg
仍然需要解释输出。 – e4c5