У меня три таблицы в целом, одна с именами игроков и их последний логин, а другая таблица с именем игрока и их IP. Это с игрового сервера, но это два отдельных «плагина» сервера, поэтому я не могу объединить их в одну таблицу.Самый быстрый способ присоединиться к таблице IP2C?
Я успешно объединить эти два на playername
колонке так:
SELECT
u.`user` as `ign`,
lb.`lastlogin` as `date`,
lb.`ip`
FROM `mcmmo_users` u
LEFT JOIN `lb-players` lb
ON u.`user`=lb.`playername`
Они производят следующий массив: Array(ign,date,ip);
Однако, у меня есть IP2C (IP-Country) таблицу, а также и Я хотел бы получить эти результаты одновременно. Однако эта таблица чрезвычайно велика и сильно замедлит запрос, если я сделал стандартную LEFT JOIN.
Есть ли более быстрый способ присоединиться к этому? Я бы предпочел не запрашивать каждый цикл PHP данных.
Я использую MySQL и PHP
База данных IP2C будет заложен следующим образом:
begin_ip | end_ip | begin_ip_num | end_ip_num | country_code | country_name
И запрашиваются следующим образом:
$IPNUM = sprintf("%u",ip2long($ip));
SELECT `country_code`
FROM `cpanel_ip2c`
WHERE `$IPNUM` BETWEEN `begin_ip_num` AND `end_ip_num`
Таблица хранит их как строки, так и целые числа. Целое число относится к php-функции ip2long(), которая преобразует строку в длинное целое число. Однако я не могу найти замену этой функции в MySQL, поэтому я не уверен, как сравнить строку IP (из таблицы) с базой данных IP2C. –
Возможно, добавьте длинную версию в таблицу 'lb-players'? – Andomar
Как мне это сделать? Таблица lb-players и таблица mcmmo_users генерируются через апплет java-сервера, я могу попытаться отредактировать источник этих плагинов, чтобы добавить длинную версию, но я не уверен, как работает ip2long в Java. –