我写了个php只读论坛性质的东西,听我慢慢说来
我有2个表tab1,tab2tab1是这样的
tid(发言id)ttitle(发言主题)
1 你好1
2 你好2
3 你好3
……
tab2是这样的
tid(发言id) tdetail(跟贴主题)
1 你好11
1 你好12
2 你好22
2 你好22
……
为了明确目的,省略了些东西我用php是这么操作的
1.连接数据库
2.取tab1的清单到数组中
3.关闭数据库(123步封装在function中,返回一个数组)
4.用foreach(数组)循环
5.显示foreach的tid和ttitle
6.打开数据库
7.读取tab2中tid和foreach数组中tid一样的跟贴主题并显示
8.关闭数据库(678步封装在function中,返回一个数组)
9.循环到5,完毕后到10
10.完成我把所有的操作都封装到function中,function中以连接数据库开始,关闭数据库结束(没有用类),所以必须用数组才能有返回值(我这么认为的,囧)
可能是我编程的思想不对,造成了mysql和php占用cpu总计高达100%
不知道各位怎么看?
我有2个表tab1,tab2tab1是这样的
tid(发言id)ttitle(发言主题)
1 你好1
2 你好2
3 你好3
……
tab2是这样的
tid(发言id) tdetail(跟贴主题)
1 你好11
1 你好12
2 你好22
2 你好22
……
为了明确目的,省略了些东西我用php是这么操作的
1.连接数据库
2.取tab1的清单到数组中
3.关闭数据库(123步封装在function中,返回一个数组)
4.用foreach(数组)循环
5.显示foreach的tid和ttitle
6.打开数据库
7.读取tab2中tid和foreach数组中tid一样的跟贴主题并显示
8.关闭数据库(678步封装在function中,返回一个数组)
9.循环到5,完毕后到10
10.完成我把所有的操作都封装到function中,function中以连接数据库开始,关闭数据库结束(没有用类),所以必须用数组才能有返回值(我这么认为的,囧)
可能是我编程的思想不对,造成了mysql和php占用cpu总计高达100%
不知道各位怎么看?
tab1中不到20条,tab2中平均每个tab1的tid对应200-700条,tab2共10000多条
你的论坛是否有分页,以及页面显示多少内容
而不论是否有分页,常见的逻辑如下一个页面专门显示tab1的列表,只要执行2
点击打开新页面
显示帖子,只要执行7如果你想直接把帖子内容显示在第一个页面,那可以循环读取tab1的数据取得tid再去以此为条件做一次查询
类似$tids = array();
foreach($tab1rows as $row)
$tids[] = $row['tid'];$sql = 'SELECT * FROM `tab2` WHERE tid IN ('.implode(', ', $tids).')';
而不是每次循环去执行一次select tid = $row['tid'];
然后数组遍历一遍结果集
foreach((array)$rs as $k=>$v)
{
$topic[$v['tid']] = $v;
$topic[$v['tid']]['reply'][] = array('tdetail '=>$v['tdetail ']);
}
然后遍历$topic,相应读出$topic的reply,显示.牺牲空间换取读mysql的消耗,要不每循环一个主题就搜索一次,就是*2的搜索量。
因无代码,无法做出细致的指导
name num order_id(1,2,3,4,5,6,……)
张三 10 0
张三 10 1
张三 11 0
张三 11 1
张三 12 0
张三 13 1
为了让看得清楚,李四等其他记录就列一条
李四 12 1
数据量大约100万左右,这个表要怎么建立索引?然后想用一条语句取得如下效果
张三 12 0
张三 13 1
张三 11 0
张三 11 1
张三 10 0
张三 10 1
也就是order_id交叉排列,num按每个order_id从大到小排列
以前csdn有朋友给出如下语句
select * from tab1 a where name='张三' order by (select count(*) from tab1 where order_id=a.order_id and num>a.num and name='张三'),order_id desc
但是经过测试,这条语句在3000数据量下选500条就会出现cpu峰值占到90%的现象