过程:
1、获取csdn的用户数据库导入本地
试用editplus打开提示内存不足,没找到办法,同事的linux下查看了一下,基本的格式如下:
用户名 # 密码 # 邮箱
用户名 # 密码 # 邮箱
相应数据结构:
复制代码 代码如下:
create table if not exists `csdn_userdb` (
`id` int(10) not null auto_increment,
`username` varchar(50) character set gbk not null,
`password` varchar(50) character set gbk not null,
`email` varchar(50) character set gbk not null,
primary key (`id`),
key `username` (`username`),
key `email` (`email`)
) engine=myisam default charset=gbk auto_increment=1 ;
一直怀疑fopen打开文件是写入缓存的,但是实践证明速度很快,应该是没有写入缓存,以下为导入数据的代码
复制代码 代码如下:
以上代码效率非常差,故做修改后代码如下:
复制代码 代码如下:
source c:/users/zhudong/desktop/userdb.sql
3、对比筛选用户
对比程序写好了,切记在命令行下运行:
复制代码 代码如下:
'$uid' and uidwhile ($rt = mysql_fetch_array($query,mysql_assoc)) {
$username = $rt['username'];
$email = $rt['email'];
$query2 = mysql_query(select * from scdn_userdb where username='$username' or email='$email');
while ($rt2 = mysql_fetch_array($query2,mysql_assoc)) {
if ($rt['password'] = md5($rt2['password'])) {
if ($rt2['username'] == $username) {
$username_num++;
fwrite($handle_username,'own:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$rt['email'].' csdn:'.$rt2['username'].'|'.$rt2['password'].'|'.$rt2['email'].\r\n);
echo 'username_num='.$username_num.\r\n;
continue;
}
/*
if ($rt2['email'] == $email) {
$email_num++;
fwrite($handle_email,'own:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$rt['email'].' csdn:'.$rt2['username'].'|'.$rt2['password'].'|'.$rt2['email'].\r\n);
echo 'email_num='.$email_num.\r\n;
}
*/
}
}
mysql_free_result($query2);
}
$uid = $nextuid;
}
?>
您看到的以上的代码是非常蹩脚的,因为其效率特别低 ,几百万的数据,要跑10多个小时,怎么能忘记连表查询这么基本的东西呢,以下为修正后的方法
复制代码 代码如下:
$link = mysql_connect('localhost', 'root', 'admin', true);
mysql_select_db('csdn',$link);
$handle_username = fopen(e:/records_username.txt,a);
while($uid$nextuid= $uid+10000;
$query = mysql_query(select m.uid,m.username,m.password,m.email,u.password as csdn_password,u.email as csdn_email from own_members m left join csdn_userdb u using(username) where m.uid>'$uid' and m.uidwhile ($rt = mysql_fetch_array($query,mysql_assoc)) {
if ($rt['password'] == md5($rt['csdn_password'])) {
$username_num++;
fwrite($handle_username,'own:'.$rt['uid'].'|'.$rt['username'].'|'.$rt['password'].'|'.$rt['email'].' csdn:'.$rt['username'].'|'.$rt['csdn_password'].'|'.$rt['csdn_email'].\r\n);
echo 'username_num='.$username_num.\r\n;
}
}
$uid = $nextuid;
echo 'uid='.$uid;
}
?>
总对比时间25分钟,相比较之前10多个小时的执行真是大有提升
总重名用户:34175
占总会员比例:1.7%
1.7%的重名用户还是挺严重的,希望本文对各位站长对比出本站的用户有所帮助
http://www.bkjia.com/phpjc/324851.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/324851.htmltecharticle过程: 1、获取csdn的用户数据库导入本地 试用editplus打开提示内存不足,没找到办法,同事的linux下查看了一下,基本的格式如下: 用户名...
