1

我有两个 MySQL 表:

如果不存在 `w​​p_zipcode` 则创建表(
  `zip` int(5) NOT NULL AUTO_INCREMENT,
  `lat` float(10,6) NOT NULL,
  `lng` 浮点数(10,6)不为空,
  主键(`zip`)
)

如果不存在则创建表`wp_events`(
  `EventID` int(11) 非空,
  `Event` varchar(256) NOT NULL,
  `Zip` int(11) NOT NULL,

不幸的是,我无法更改 wp_events(它总是被新数据覆盖),并且我正在“距离”搜索离用户最近的事件。我正在使用此处找到的 Google 示例

( 3959 * acos( cos( radians(34.070358) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-118.349258) ) + sin( radians(34.070358) ) * sin( radians( lat ) ) ) ) AS distance FROM wp_events HAVING distance < 25 ORDER BY distance LIMIT 0 , 20

我的问题是这样的:为了使算法起作用,我需要有邮政编码的 lng 和 lat,但是由于我在 wp_events 中搜索事件,有没有办法从 wp_events 获取事件的邮政编码,并且以某种方式(这是我的问题出现的地方)从 wp_zipcodes 获取该特定邮政编码的相应 lat 和 lng 并返回到 SQL 语句以获取所需邮政编码附近的适当事件。

提前致谢

4

2 回答 2

0

您可以使用JOIN,如下所示:

SELECT wp_events.EventId, wp_events.Event, wp_events.Zip, wp_zipcode.lat, wp_zipcode.lng
FROM wp_events
JOIN wp_zipcode ON wp_events.Zip = wp_zipcode.zip
于 2013-10-20T10:38:20.660 回答
0
SELECT wp_events.*, 
       wp_zipcode.lat, 
       wp_zipcode.lng,
       ( 3959 * acos( cos( radians(34.070358) ) * cos( radians( wp_zipcode.lat ) ) * cos( radians( wp_zipcode.lng ) - radians(-118.349258) ) + sin( radians(34.070358) ) * sin( radians( wp_zipcode.lat ) ) ) ) AS distance
  FROM wp_events 
  LEFT JOIN wp_zipcode 
    ON wp_zipcode.zip = wp_events.Zip
HAVING distance < 25 
 ORDER BY distance 
 LIMIT 0 , 20
于 2013-10-20T10:51:57.710 回答