<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>爱周末 &#187; ip排序</title>
	<atom:link href="http://zhoumo123.cn/tag/ip%e6%8e%92%e5%ba%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://zhoumo123.cn</link>
	<description>知识分享，共同进步。zhoumo123.cn</description>
	<lastBuildDate>Thu, 07 Nov 2019 05:53:49 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>php中ip排序及mysql中ip排序方法</title>
		<link>http://zhoumo123.cn/php/2522.html</link>
		<comments>http://zhoumo123.cn/php/2522.html#comments</comments>
		<pubDate>Tue, 03 Mar 2015 12:01:04 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[ip排序]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=2522</guid>
		<description><![CDATA[在php项目应用中，如何根据ip来正确排序呢，如果直接order by ip 排序的结果不合理，下面分享一下在php中如何通过ip排序以及在mysql语句中ip排序方法，如下： PHP echo ip2long(&#8216;192.168.1.38&#8242;); 输出：3232235814 MYSQL SELECT INET_ATON(&#8216;192.168.1.38&#8242;); 输出：3232235814 两个函数返回的结果是一样的，都是A*256*256*256+B*256*256+C*256+D的算法 192*256*256*256+168*256*256+1*256+ ...  <a href="http://zhoumo123.cn/php/2522.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>在php项目应用中，如何根据ip来正确排序呢，如果直接order by ip 排序的结果不合理，下面分享一下在php中如何通过ip排序以及在mysql语句中ip排序方法，如下：</p>
<p>PHP<br />
<strong>echo ip2long(&#8216;192.168.1.38&#8242;);</strong><br />
输出：3232235814</p>
<p>MYSQL<br />
<strong>SELECT INET_ATON(&#8216;192.168.1.38&#8242;);</strong><br />
输出：3232235814</p>
<p>两个函数返回的结果是一样的，都是A*256*256*256+B*256*256+C*256+D的算法<br />
192*256*256*256+168*256*256+1*256+38 = 3 232 235 814</p>
<p>反过来，从int转换为IP地址分别是php的long2ip()和mysql的INET_ATON()。</p>
<p>mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话，128以上的IP段就存储不了了。</p>
<p>传统的方法，创建varchar(15)，需要占用15个字节，而改时使用int只需要4字节，可以省一些字节。</p>
<p><strong>php存入时：$ip = ip2long($ip);</strong><br />
<strong>mysql取出时：SELECT INET_ATON(ip) FROM table &#8230;</strong><br />
php取出时，多一步：$ip = long2ip($ip);</p>
<p>转换以前的数据：</p>
<p>1.把以前的varchar()数据转换为int型的SQL语句：<br />
UPDATE `hx_table` SET ip =  INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL</p>
<p>2.把字段更改为int型：<br />
ALTER TABLE `hx_table` CHANGE `ip` `ip` INT UNSIGNED NOT NULL<br />
3.程序做相应修改上传，完成。</p>
<p>@@UPDATE@@20110310：</p>
<p>在32位的机子上，echo ip2long(&#8216;192.168.1.38&#8242;);由于超过32位的最大数，导致输出负数-1062731482。</p>
<p>有两种方法更新为正数：<br />
$ip_long = bindec(decbin(ip2long($ip)));<br />
或<br />
$ip_long = = sprintf(&#8220;%u&#8221;, ip2long($ip));<br />
因此一种是修改PHP程序，使其肯定存入正数。<br />
另一种是将mysql的这个字段使用int，非UNSIGNED，使其可以存入负数。</p>
<p>以上是在php中如何通过ip排序以及在mysql语句中ip排序方法。<br />
原文：http://blog.csdn.net/hejie322/article/details/7103935</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/php/2522.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
