2009-10-04 2 views
0

Я бегу этот запросGeo IP проблема запросов к базе данных

SELECT 
country, 
countries.code, 
countries.lat, 
countries.lng, 
countries.zoom, 
worldip.start, 
worldip.end 

FROM countries, worldip 
WHERE countries.code = worldip.code 
AND 
'91.113.120.5' BETWEEN worldip.start AND worldip.end 
ORDER BY worldip.start DESC 

на таблицу со этими полями,

worldip   countries 
-------------- ---------------- 
start    code 
end    country 
code    lat 
country_name  lng 
        zoom 

А иногда я получаю два результата в двух разных странах для одного IP , Я не понимаю, почему

'91.113.120.5' BETWEEN worldip.start AND worldip.end 

будет возвращать два различных результата, так как 10 находится между 9 и 11, но также 5 и 12. Я бы мог подумать, в том числе WHERE countries.code = worldip.code бы предотвратить это, или, по крайней мере, гарантировать, что я получил право страны нет сколько результатов оно вернуло. но это не так.

Я также добавил ORDER BY worldip.start DESC, который, кажется, работает, поскольку более точный адрес ip, чем выше список, тем он появляется. вы можете увидеть, что он работает (или нет) here. Но это быстрое решение, и я хотел бы сделать все правильно.

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

ответ

2

Во-первых, приятное приложение. Я искал полеты - мне бы хотелось сравнить цены и никаких ссылок на русском языке, пожалуйста. Вы можете попробовать бесплатную службу геолокатора вместо использования своей собственной базы геоинформации. Что в стороне - это ваше поле ip 'IP' datatype в MySQL, позволяющее сравнивать? Это может помочь вам получить правильную обыденность. В противном случае материал сравнивается как строки, и могут возникнуть проблемы, когда длина IP-адреса различна и так далее.

С целым представлением IP-адресов вы можете использовать операторы < = и> =.

+0

Спасибо за ответ и отзыв. Я перебираю все и вынимаю все грязные маленькие ярлыки, которые я обманывал (href = "#" !! Я знаю лучше). Увы, получение цен на рейсы в настоящий момент недоступно. Эта информация стоит больших денег, я должен заплатить за запрос. Сборы вымогательства. Но если кто-то хочет инвестировать, то я все уши. Но есть больше вещей, доступных бесплатно, со стыковками рейсов, отелями, специальными предложениями и т. Д. – gargantuan

+0

Я предполагаю, что там, где полевые агенты зарабатывают деньги, но не можете ли вы получить цены от девственного или реактивного старта или тигра (я нахожусь в Аусе) по сценарию, представляющему свои форм запросов и очистки HTML? – whatnick

+0

yup, это идея, с которой я играю, но с 2000 авиакомпаниями, которые будут заниматься, это очень много кодирования. Хотя я могу просто начать его, если вы не хотите участвовать в акции? – gargantuan

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