选择中的MySQL子查询,返回多列
我正在处理两张桌子<代码>位置和选择中的MySQL子查询,返回多列,mysql,Mysql,我正在处理两张桌子位置和美国代码 位置包含用户坐标和行驶速度 us_zipcodes包含美国境内的所有城市及其zipcodes和坐标 这里的目标是返回用户的纬度、经度、速度和最近的城市 在我的select中,我试图在select子查询中从us\zipcodes返回两列。我知道有人可能会建议加入,但我的情况不允许在上使用 子查询根据与us_zipcodes表中城市坐标最接近的用户坐标选择城市 我想知道我想做的事情是否可行,如果可能,正确的语法 我的尝试如下。先谢谢你 SELECT l.la
美国代码
位置
包含用户坐标和行驶速度
us_zipcodes
包含美国境内的所有城市及其zipcodes和坐标
这里的目标是返回用户的纬度、经度、速度和最近的城市
在我的select中,我试图在select子查询中从us\zipcodes
返回两列。我知道有人可能会建议加入,但我的情况不允许在上使用
子查询根据与us_zipcodes
表中城市坐标最接近的用户坐标选择城市
我想知道我想做的事情是否可行,如果可能,正确的语法
我的尝试如下。先谢谢你
SELECT
l.lat,
l.lng,
l.speed
(
SELECT
CONCAT(city, ' ', state_abrv) AS nearest,
(
3959 *
acos(
cos( radians( l.lat ) ) *
cos( radians( lat ) ) *
cos(
radians( lng ) -
radians( l.lng )
) +
sin( radians( l.lat ) ) *
sin( radians( lat ) )
)
) AS distance
FROM
us_zipcodes
ORDER BY
distance ASC
LIMIT 0, 1
) AS nearest, distance
FROM
location AS l
WHERE
l.userID = :userID
编辑:我的表格结构如图所示
表:位置
ID | lat | lng | speed | userID
___________________________________________________________________________________
1 | 55.159399 | -74.98976 | 35 | 1
2 | 45.168399 | -52.56476 | 45 | 2
3 | 64.593399 | -64.32576 | 55 | 3
4 | 98.193399 | -72.81176 | 65 | 4
表:us\u zipcodes
ID | city | state_abrv | lat | lng
______________________________________________________________________________________
1 | Foo City | MI | 45.3265 | -81.98747
2 | Bar City | AK | 65.3265 | -65.98747
3 | Fake City | FL | 25.3265 | -75.98747
4 | Smith City | MI | 64.3265 | -89.98747
也许像这样的东西能帮上忙
SELECT
state_abrv,
city,
3959 * acos(
cos( radians( (SELECT lat FROM location WHERE userID = :userID) ) ) *
cos( radians( lat ) ) *
cos(
radians( lng ) -
radians( (SELECT lng FROM location WHERE userID = :userID) )
) +
sin( radians( (SELECT lat FROM location WHERE userID = :userID) )) *
sin( radians( lat ) )
) AS distanse,
(SELECT lng FROM location WHERE userID = :userID) as lng,
(SELECT lat FROM location WHERE userID = :userID) as lat,
(SELECT speed FROM location WHERE userID = :userID) as speed
FROM us_zipcodes ORDER BY distanse LIMIT 1;
或者只是两个单独的子查询
SELECT
l.lat,
l.lng,
l.speed,
(SELECT (3959 * acos(
cos(radians(l.lat)) *
cos(radians(lat)) *
cos(radians(lng)-radians(l.lng)) +
sin(radians(l.lat)) *
sin(radians(lat)))
)
FROM us_zipcodes
ORDER BY distance ASC
LIMIT 0, 1
) AS distance,
(SELECT CONCAT(city, ' ', state_abrv)
FROM us_zipcodes
WHERE 3959 *
acos(cos(radians(l.lat)) * cos(radians(lat)) *
cos( radians(lng) - radians(l.lng)) +
sin(radians(l.lat)) *
sin(radians(lat))
) = distance) AS nearest
FROM
location AS l
WHERE
l.userID = :userID;
您能提供您的表格结构吗?我的情况不允许在
上使用。为什么不呢?因为这两个表中没有共享列。没有联系。内部联接中的选择基于与外部查询的lat和lng相比的最近坐标。