このクエリを実行しています
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
また、1つのIPで2つの異なる国で2つの結果が得られることもあります。理由がわかります
'91.113.120.5' BETWEEN worldip.start AND worldip.end
10は9から11の間であるため、2つの異なる結果が返されますが、5から12もWHERE countries.code = worldip.code
返されます。これを含めると、これを防ぐことができたと思います。しかし、そうではありません。
ORDER BY worldip.start DESC
また、IPアドレスが正確であるほど、リストの上位に表示されるため、機能しているように見えることも追加しました。ここでそれが機能している(または機能していない)ことがわかります。しかし、それは簡単な修正であり、私はそれを正しく行いたいと思います。
SQLは私にとって本当の弱点です。誰かが私が間違っていることを説明できますか?