English 中文(简体)
缩略语
原标题:IP address numbers in MySQL subquery

我有一个问题,即由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,但在这种情况下绝对不是必要——任何帮助都得到赞赏。

最佳回答
问题回答

似乎没有任何办法实现我对日本宇宙开发网或分局的希望。

为了扩大Ike Walker关于使用储存功能的建议,我最后在MySQL中设立了一个储存功能,其内容如下:

DELIMITER //
DROP FUNCTION IF EXISTS get_network_provider //
CREATE FUNCTION get_network_provider(ip_address_number INT) RETURNS VARCHAR(255)
BEGIN
DECLARE network_provider VARCHAR(255);
    SELECT provider_name INTO network_provider FROM network_providers
    WHERE ip_address_number >= network_providers.ip_start
    AND network_providers.provider_name != ""
    ORDER BY provider_name.ip_start DESC LIMIT 1;
RETURN network_provider;
END //

<>Explanation:

绕过空白名称、使用、使用、使用和安装的核对; 自动启动而不是BETWEEN ip_start and ip_end,是两个网络提供数据库Im的具体判断,这两个数据库都需要以这种方式查询。

当要求行使职能的问题只需要归还几百项成果时(尽管它可能会有几秒钟)。 关于交回几千份结果的询问,可能需要2或3分钟。 对数以万计(或更多)结果的询问来说,实际使用速度太慢。

这并不是使用像这种储存功能(即每次回收的结果都引发另外的询问)的出乎意料,但我比我预期的快点击业绩下降。

<>建议>

情况简介是,我必须接受,数据结构不适合我的需求。 一位朋友已经向我指出了这一点,这只是当时我真心想听到的一点(因为我真的希望利用这一具体的网络——供应银行——因为表格中对我有用的其他关键因素,例如对于像地处地这样的东西。)

如果你最终试图利用采用类似可疑数据格式的任何IP提供方行(或实际上任何其他数据库),那么我只能说,它们并不合适,而且不值得试图将那些与它们合作的东西混为一谈。

至少,你们需要改革数据,以便用简单的BETWEEN声明(不分类,也不作其他比较)可靠地加以使用,以便你能够使用这些数据与子类(或JOINS)——尽管它可能有一个指标,表明任何数据显示可能并非全部可靠。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签