Как насчет того, чтобы попробовать, чтобы увидеть, что происходит?
аюсь использовать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, поэтому мне не нужно делать два запроса?