0

我又遇到了另一个 SQL 问题。

我有 2 张桌子:

CREATE TABLE cities(  
 city_id INT PRIMARY KEY, 
 city_name  TEXT,
 city_lat TEXT,
 city_long TEXT
 ); 

CREATE TABLE entries(
 entry_id INT PRIMARY KEY,
 city_name TEXT
 );

这是有趣的部分。

我正在尝试按半径进行搜索,这意味着我想获取我正在寻找的城市 10 公里(例如)半径内的城市名称。

查询将类似于

 SELECT * FROM entries WHERE entries.city_name LIKE [all the cities in the radius].

我有一个 SQL 查询来获取与我想要的城市相对应的城市:

SELECT `city_name`, ( 6371 * acos( cos( radians($cooLat) ) * cos( radians( city_lat ) ) * cos( radians( city_long) - radians($cooLong) ) + sin( radians($cooLat) ) * sin( radians( city_lat) ) ) ) AS distance FROM cities HAVING distance < $radius ORDER BY distance

$cooLong 和 $cooLat 是我在调用该请求的函数中传递的 php 变量。

所以从那个选择我得到一个行集,但我不知道如何混合 2 来获得我的最终查询,该查询将在第一个查询中使用第二个查询的结果。

无论如何,即使我解决了第一个问题,我也会有未知数量的匹配项。我是否必须通过执行以下操作来生成请求:

SELECT * FROM entries WHERE entries.city_name LIKE 'name_a' OR entries.city_name LIKE 'name_b' OR entries.city_name LIKE 'name_c' ... 

而对于每个城市呢?

4

1 回答 1

0

您可能应该对此类内容使用空间数据类型和索引:

http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html

于 2013-04-28T09:55:00.893 回答