基本上我想做的是从roadData
中选择所有坐标
一个接一个,然后在20 {20}内找到tweetMelbourne
中的所有点
它的里程数并将这些点插入另一个表格。
因此(x,y)
表中的每个roadData
都可以找到相邻的数据点
tweetMelbourne
并将这些点插入另一个新表中。
所以我必须这样做:
SELECT geo_coordinates_latitude, geo_coordinates_longitude
FROM tweetmelbourne
HAVING ( 3959 * acos( cos( radians(latitude) ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians(longitude) ) + sin( radians(latitude) ) *
sin( radians( geo_coordinates_latitude ) ) ) ) < .1 ORDER BY distance LIMIT 0 , 20;
其中我必须从另一个表中获取纬度和经度的值:
select longitude,latitude from roadData;
描述tweetmelbourne;
描述roadData;
SELECT geo_coordinates_latitude, geo_coordinates_longitude
FROM tweetmelbourne;
select longitude,latitude from roadData;
答案 0 :(得分:0)
具有多个参数的IN()
的正确语法是:(Val1,Val2) IN(SELECT VAL1,val2..
SELECT t.address,(t.x+t.y) as z
FROM student t
WHERE (t.x,t.y) IN(SELECT x,y FROM tweet)
也可以通过加入来完成:
SELECT t.address,(t.x+t.y) as z
FROM student t
JOIN tweet s
ON(t.x = s.x and t.y = s.y)
编辑:我认为你想要的是:
SELECT s.address,t.x+t.y as z
FROM student s
CROSS JOIN tweet t
答案 1 :(得分:0)
试试这个:
SELECT s.address, (t.x + t.y) as z
from (SELECT id,x,y FROM `tweet`) as t, student s
WHERE t.id = s.id;
答案 2 :(得分:0)
您需要加入这两个表,计算ON
子句中的距离以选择附近的行。
SELECT *
FROM tweetmelbourne
JOIN roadData
ON ( 3959 * acos( cos( radians(latitude) ) * cos( radians( geo_coordinates_latitude ) ) *
cos( radians( geo_coordinates_longitude ) - radians(longitude) ) + sin( radians(latitude) ) *
sin( radians( geo_coordinates_latitude ) ) ) ) < .1
如果表格很大,这将非常慢。使用索引来实现连接是不可能的,因此必须在每对行上执行复杂的公式。您可能希望查看MySQL的Spatial Data扩展名。