Как насчет того, чтобы попробовать, чтобы увидеть, что происходит?

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

 Mikko Wilkman14 янв. 2011 г., 13:52
Вероятно, выходит за рамки этого вопроса?
 Mac Taylor12 янв. 2011 г., 11:08
все еще у меня есть перегрузка и проблема, любой пример на показе флага онлайн-пользователей!

Ответы на вопрос(1)

SELECT INET_ATON ('193.169.0.0') -> 3249078272

Наслаждаться :)

 Mac Taylor12 янв. 2011 г., 10:16
и мой запрос будет: ON INET_ATON (ipc.ip_lo) <= s.session_ip и INET_ATON (ipc.ip_hi)> = s.session_ip ????
 Mikko Wilkman14 янв. 2011 г., 13:51
Как насчет того, чтобы попробовать, чтобы увидеть, что происходит?

Ваш ответ на вопрос