没看到你的全选按纽呢?
不过这个问题 跟php代码没关系哈
你先做下静态的全选功能吧
我只针对你这个做优化吧..
第一个不要用select * 这样的sql语句,你需要什么字段就写哪些字段
都需要的话,你都写出来,select * 效率很低的..
第二个如果说你的后台中对这些数据的变动不是很频繁
然后你可以将查询结果存入memcahe中
我写一段伪代码
$mem_key="all";
$res = $memcache-get($mem_key);
//如果没有存入memcache中
if (empty($res){
//sql语句可以用left jion on关联查询
$bb=$mysql-_query($aaa);
while(!!$_rows=$mysql-_fetch_array_list($bb)){
//do something
$res ....
}
//结果存入memecahed中
$memcache-set($mem_key,$res,0,超时时间);
$res就是你获取的结果..
你这段代码基本可以这样..
php
$str = HHH
region=BJ
region=XA
region=CD
region=GZ
region=WH
region=NJ
region=SH
region=SY
region=MISC
region=CIS
region=TTN
HHH;
$reg = '/(?=region=)(\w+)(.+?)(?=region=)/s';
preg_match_all($reg, $str, $matches);
$result = array();
foreach($matches[1] as $key=$val)
{
$header = array("$val");//BJ
$result[] = array_merge($header, $body);//merge array
//match last
$result[] = $tmp;
echo 'hr';
//换行符不知怎么弄的,就是找不到,所以多出了空格.
最好是换种方式实现,不要通过网页进行采集.
可以非常简单的在数据库的表,创建一个采集队列,后台执行一个crontab的计划任务,去完成队列里的采集任务.
你可以先看看每次中断是固定时长,还是固定次数;也可以多打日志,每次循环都输出些参考参数如循环条件、内存使用等信息,再分析哪些可能导致程序中断的原因.
日志文件(access.log)格式:
配置文件cfg.php:
define(HOST,'localhost');//主机名
define(USER,'root');//数据库账号
define(PASS,'111111');//数据库密码
define(DBNAME,'test');//所用的数据库
具体代码test.php:
require?'./cfg.php';
$link?=?mysql_connect(HOST,USER,PASS)?or?die('连接数据库失败');
//程序中自动建库和建表,这样一定程度上拖慢了程序的速度
//创建数据库
$crdb="create?database?if?not?exists?".DBNAME;
if(!mysql_query($crdb)){
die('创建数据库失败');
//链接数据库
mysql_select_db(DBNAME)?or?die('选择数据库失败');
mysql_set_charset(CHARSET);
//数据循环建表
if($i10){
}else{
$tbhz=$i;
$ctbsql="create?table?if?not?exists?logininfo_{$tbhz}(
id?int?not?null?auto_increment?primary?key,
zoneid?int?not?null?default?0,
bannerid?int?not?null?default?0,
clentid?int?not?null?default?0,
materialid?int?not?null?default?0,
sum?int?not?null?default?0
mysql_query($ctbsql);
//打开文件
$file=fopen("./access.log",'r')?or?die("打开文件失败");
//对文件内容进行循环,直到文件末尾才停止
while?(!feof($file)){
//每次读取一行
$pinfo=parse_url($line);//url信息
$ext=$pinfo['query'];//取得传递的各个参数
$parray=explode('',$ext);//根据分解为数组
//因为分解为数组后并不是要的值,所以要对值进行一次截取,将等号及等号左边的都去掉
foreach($parray?as?$val){
$narray[]=ltrim(strstr($val,'='),'=');
//截取时间的秒数
$time=date('Y-m-d?H',$getmun);//将秒数转化为时间类型.
//得到表后缀
$tbhz=date('H',$getmun);
//echo?$sql;
$res=mysql_query($sql);//执行插入
if(!$res?||?!mysql_affected_rows()0){
die('写入数据库失败');
unset($narray);//循环一次将narray销毁,为下一次循环做准备
//var_dump(parse_url($line)['query']);
fclose($file);//关闭
//因为sum字段还是0,下面代码段需要处理sum字段的值
//该sql语句是把同一个小时内,并且符合条件相等的登陆的总次数和需要的登陆信息查出,为下面修改sum做准备
$sql="SELECT?COUNT('zoneid')?AS?sum,zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace?FROM?logininfo_{$tbhz}?GROUP?BY?zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace";
//发送查询sql
$res=mysql_query($sql);
if($res?mysql_num_rows($res)0){
while($row=mysql_fetch_assoc($res)){
//修改sum字段,即同一小时内的登陆次数
$upsql="update?logininfo_{$tbhz}?set?sum='{$row['sum']}'?where?zoneid='{$row['zoneid']}'?and?bannerid='{$row['bannerid']}'?and?clentid='{$row['clentid']}'?and?materialid='{$row['materialid']}'?and?redirect='{$row['redirect']}'?and?user_agent='{$row['user_agent']}'?and?utrace='{$row['utrace']}'";
//发送修改sql,执行修改sum
$upres=mysql_query($upsql);
if(!$upres){
die('修改登陆sum失败');
echo?'数据成功入表';
使用说明:
将配置文件cfg.php中的连接数据库账号、密码修改为自己本机的(默认新增的库名是test)
直接运行test1.php
以上就是土嘎嘎小编为大家整理的php按次处理数据相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!