Я выполняю этот запрос
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-адрес, тем выше в списке он появляется. Вы можете видеть это работает (или нет) здесь . Но это быстрое решение, и я бы хотел сделать это правильно.
SQL для меня очень слабое место. Может кто-нибудь объяснить, что я делаю не так?