2016-10-11 3 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.

Я попытался буферами = True для курсора, но все еще такой же ошибки. А также эффективно делать это или любой другой лучший способ.

ответ

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

Привет Тим ​​Я получаю то, что вы говорите, но у меня есть 4 Gb данных, поэтому CrOSS Join не выгоден, и он медленный. Если я делаю поровну, я не могу сохранить результат на ходу. Для перекрестного соединения сначала нужно сопоставить, а затем вычислить. –

+0

Метод, используемый для подключения двух таблиц в SQL, - это объединение (ну, также объединение, но не будет работать здесь). Если вы не можете присоединиться, и ваш текущий метод не будет работать, то какие варианты вы оставили? –

+0

Я хочу получить данные о ролле, а затем выполнить rooved cross join со всеми записями другой таблицы и фильтрацией, основанной на сохранении состояния расстояния в другой таблице. –

Смежные вопросы