2016-10-11 92 views
1

我想计算两点之间的距离。对于一个表中的每个点,我必须计算与同一数据库中另一个表中所有其他点的距离。我正在使用python,但我无法一次执行两个查询。两次select查询python

import mysql.connector 
from haversine import haversine 

cnx = mysql.connector.connect(host='localhost',user='xxxxx',passwd='xxxxxx',db='xxxxxx') 
cursor = cnx.cursor() 
cursor2 = cnx.cursor() 

query = ("select longitude,latitude from roadData limit 5") 
cursor.execute(query) 

query2=("SELECT geo_coordinates_latitude, geo_coordinates_longitude from tweetmelbourne limit 2") 
cursor2.execute(query2) 

for (longitude,latitude) in cursor: 
    print longitude 
    print latitude 
    for (geo_coordinates_longitude,geo_coordinates_latitude) in cursor2: 
     print geo_coordinates_longitude 
     print geo_coordinates_latitude 


cursor.close() 
cnx.close() 

但是,我得到错误第二查询执行

InternalError: Unread result found.

我试图缓冲=真正的光标但还是同样的错误。 这样做或其他更好的方式也是有效的。你可以在这里使用

回答

0

一招将交叉连接两个表一起:

SELECT t1.longitude, 
     t1.latitude, 
     t2.geo_coordinates_latitude, 
     t2.geo_coordinates_longitude 
FROM 
(
    SELECT longitude, latitude 
    FROM roadData 
    LIMIT 5 
) t1 
CROSS JOIN 
(
    SELECT geo_coordinates_latitude, geo_coordinates_longitude 
    FROM tweetmelbourne 
    LIMIT 2 
) t2 

这应该工作,因为你遍历结果Python代码设置的方式类似于一个交叉连接。在这种情况下,使用上面的查询,你只需要遍历整个结果集一次。

+0

Hi Tim我明白你的意思,但我有4 Gb的数据,所以CrOSS Join并不有利,而且速度很慢。如果我acn做行明智我将结果存储在运行。对于交叉连接,首先你必须映射,然后它会计算。 –

+0

用于在SQL中连接两个表的方法是一个连接(也是一个联合,但在这里不起作用)。如果你不能加入,而你目前的方法不起作用,那你还有什么选择? –

+0

我想获得rowwise数据,然后做rowise交叉连接与其他表的所有条目和基于距离条件存储过滤另一个表中。 –