Я пытаюсь использовать таблицу ip2country
чтобы показать флаги страны пользователей на моем веб-сайте.
Самое простое, что я придумал, – написать инструкцию SQL, которая выводит пользователей из таблицы сеансов и запросов, чтобы узнать, соответствует ли их соответствующий IP-адрес определенному диапазону для определения их страны / флага.
Это просто, но также и опасно, потому что, когда есть 300 пользователей в Интернете, чтобы показать, и я извлекаю их из таблицы сеансов, запрашивая их страны для отображения флагов, наверняка будет большое использование памяти.
Теперь я попробовал это сделать в одном запросе:
SELECT s.session_ip, ipc.* FROM session AS s LEFT JOIN ip2country AS ipc ON ipc.ip_lo <= s.session_ip AND ipc.ip_hi >= s.session_ip WHERE s.session_time > '".( time() - 60) )."'
Теперь ясно, что вышеуказанный запрос неверен, поскольку IP-адреса, сохраненные в таблице ip2country
являются целыми числами, например 1000013824, а IP-адреса, хранящиеся в таблице сеанса, представляют собой строковые представления IP-адресов, например, 193.169.0.0
Я знаю, как конвертировать из IP в длинный PHP с помощью ip2long()
, но есть ли какой-либо эквивалентный метод в MySQL, поэтому мне не нужно делать два запроса?
SELECT INET_NTOA (1000013824) -> 59.155.0.0
SELECT INET_ATON ('193.169.0.0') -> 3249078272
Наслаждаться 🙂