我的做法,采用分解负载的方法,从双方面进行分解,数据库与php共同进行压力的分解,如果一方的压力过大,又极大可能造成死机.如果是数据库在的压力太大,还有可能会造成数据库的损坏.如果是php的压力过大,可能会出现一个页面要求计算好几分钟的现像肯定不合道理.
如果你所说的大量有上面我说的情况的话请用第一种,如果没有的话用第二种.

解决方案 »

  1.   

    如果你能确认“前者的query发送次数可能数十倍于后者”那么应选后者。
    但是根据你的描述,用mysql的分组子句应该不会“数十倍于后者”,那样的话还是前者好php的数组操作是很强大的,合理的组织数据就可以利用数组函数进行计算,也并不复杂。总之,具体问题要具体对待,不要试图用一个固定的模式来处理所有的事物
      

  2.   

    我是这样想的:前者“数十倍”其实就是“数十次”属于一种极限情况
    因为这个次数也是不定的,一份问卷含有问题越多,统计答卷select次数就越多
    一般估计可能是10~30次左右
    而且只是用些count()/max(),基本没有计算了,php也管输出而已;
    但是考虑到很多虚拟主机并发数有限制,用这种方法人多的时候有问题?倾向放弃后者php数组功能确实强大,但偏偏我期望的一个函数没有——
    count某个数组中含有表达式表示的值的元素个数(这个在数据库中count()就方便多了);
    但因为打十多年前学basic就灌输了输入/计算/输出三环节分开,我还是比较习惯用这种方法而且这段代码不是最终的,以后会有更高级的统计功能,
    我希望以后每次增加功能是增加类或某些function,而不是换一种算法
    所以不能单从现在考虑,现在的记录数再多也不超过100条
      

  3.   

    1、“因为这个次数也是不定的,一份问卷含有问题越多,统计答卷select次数就越多”
    假定每回答一个问题为一条记录
    则 select count(*) from tbl_name group by 问题
    一次就可得到各问题的回答次数
    select 问题,答案,count(*) from tbl_name group by 问题,答案
    一次就可得到各问题的按答案的回答次数2、“后者php数组功能确实强大,但偏偏我期望的一个函数没有——
    count某个数组中含有表达式表示的值的元素个数(这个在数据库中count()就方便多了);”
    array_count_values()函数就可满足你的要求
    <?php
    $array = array (1, "hello", 1, "world", "hello");
    print_r(array_count_values ($array));
    ?>  以上程序输出为: Array
    (
        [1] => 2
        [hello] => 2
        [world] => 1
    )
     
    请注意到该函数是针对一维数组的,所以我上面说到要“合理的组织数据”。
    要达到使用array_count_values 函数统计数据的目的,你需要按列读取记录而不是按行读取
    where($row = mysql_fetch_array($rs))
      $ar[] = $row;
    这是按行读取记录where($row = mysql_fetch_array($rs))
      list($ar[0][],$ar[1][],...) = $row;
    这是按列读取记录
      

  4.   

    响应、负荷、维护、扩展、速度都是第二种好,现在服务器的配置哪会低,用mysql自身处理就不需占用资源吗?
      

  5.   

    唠叨大兄您说的我都想过
    array_count_values为什么没有选用是因为它是对所有值count,我需要是指定某个值
    当需要某个值还是要来一次检索现在脑子有点死了,我想想从把二维数组再分三维数组及多表查询的方向再试试
      

  6.   

    思前想后还是选第二种,把php代码大规模优化,减少两个循环,结帖