2016-10-11 8 views
1

2点間の距離を計算したいと思います。 1つのテーブルの各ポイントのために、私は同じデータベース内の別のテーブルの他のすべてのポイントとの距離を計算する必要があります。私はPythonを使っていますが、一度に2つのクエリを実行することはできません。一度に2つの選択クエリ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() 

しかし、私は2番目のクエリカーソルの真の実行

InternalError: Unread result found.

私はバッファを試してみました=が、それでも同じエラーのためのエラーを取得しています。 また、これや他のより良い方法のようにするのも効率的です。あなたはここに使用することができ

答えて

0

1つのトリックは、2つのテーブルを結合横断するようになります:

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コードで結果セットを反復処理する方法は、クロス結合似ているので、これは動作するはずです。この場合、上記の問合せを使用すると、結果セット全体で1回だけ反復する必要があります。

+0

こんにちは私はあなたが言っていることを得るが、私は4Gbのデータを持っているので、CrOSS Joinは有益ではなく、遅いです。私が列方向にするならば、私は実行結果を保存する。まずクロスジョインのためにマップしなければなりません。 –

+0

SQLで2つのテーブルを接続するために使用されるメソッドは、結合です(これもまた、共用体ですが、ここでは機能しません)。参加できず、現在の方法が機能しない場合は、どのオプションを残していますか? –

+0

私は、rowwiseデータを取得して、他のテーブルのすべてのエントリとrow​​ise cross joinを行い、別のテーブルの距離条件ストアに基づいてフィルタリングします。 –

関連する問題