我有一个问题,即由MySQL储存的IPV4地址(MySQL 5.0)组成的子座。
IP地址储存在两个表格中,既包括网络编号格式,例如MySQL s INET_ATON(ATON)。 第一个表格(活动)载有与其有关的IP地址的许多浏览量,第二个表格(网络——供应商)载有特定网关的供应商信息清单。
www.un.org/Depts/DGACM/index_russian.htm
event_id (int)
event_name (varchar)
ip_address (unsigned int)
<>strong>network_providers table (~60,000rows):
ip_start (unsigned int)
ip_end (unsigned int)
provider_name (varchar)
为I m拥有的问题简化了手续,目的是按照以下方式的出口:
event_id,event_name,ip_address,provider_name
如果按照以下任一路线提出询问,我会得到我预期的结果:
SELECT provider_name FROM network_providers WHERE INET_ATON( 192.168.0.1 ) >= network_providers.ip_start ORDER BY network_providers.ip_start DESC LIMIT 1
SELECT provider_name FROM network_providers WHERE 3232235521 >= network_providers.ip_start ORDER BY network_providers.ip_start DESC LIMIT 1
这就是说,我所研究的知识产权公司(当然是我没有在问询中真正使用192.168.0.1的Im)。
然而,在以以下方式履行与分局相同的询问时,我预计不会得出以下结果:
SELECT
events.event_id,
events.event_name,
(SELECT provider_name FROM network_providers
WHERE events.ip_address >= network_providers.ip_start
ORDER BY network_providers.ip_start DESC LIMIT 1) as provider
FROM events
转回了provider的不同(不正确)价值。 在provider一栏中退还的90%以上(但奇怪的是并非全部)价值含有该知识产权的错误提供者信息。
用events.ip_address in a subquery only to reformation it includes the Value I d expected and that the subquery can par it. 以实际网络号码取代events.ip_address,同样在分局积极利用这一网络,从而给我工作。
我怀疑,在我没有获得的我的SQL中,存在一些根本性和重要的问题。 我与IP地址一样,在我的SQL中,我前面的比喻是这样,但过去没有做过使用分局的检查。
www.un.org/Depts/DGACM/index_spanish.htm 问题:
我确实赞赏我如何获得我所希望的产出的榜样,如果这里有人知道,我为什么不做些什么,所以我可以避免再犯这一错误。
<>注:
实际实际使用量I m试图使用量相当复杂(涉及两个或三个表格)。 这是一个简化版本,以避免问题过于复杂。
此外,我知道Im没有在Pip_start &之间使用;ip_end——故意(银行可以过时,而此类情形中,亚洲开发银行的所有人几乎总是处在下一个具体范围,因此最好的猜测是罚款),不过,我很感谢与问题相关的任何改进建议。
效率总是 n,但在这种情况下绝对不是必要——任何帮助都得到赞赏。