我又遇到了另一个 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' ...
而对于每个城市呢?