2016-10-11 75 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交叉連接與其他表的所有條目和基於距離條件存儲過濾另一個表中。 –