【求解答】php+mysql如何做大数据量的多条级联数据统计

lanybass 发布于 2013/05/24 15:09
阅读 1K+
收藏 2

MySQL连接为什么挂死了?别踩坑!>>>

硬件环境:

    OSCentOS5

    RAM:8G

软件环境:

    PHP-RAM512M

    PHP5

    MYSQL5.1

    Memcache

    Coreseek 4.1

    sphinx 2.0.1

功能需求:

    3个表的联合统计

表结构:

    tableOne:main_table(商品主表)

        primary key:goods_id

        other field:goods_name

        other field:brand_id

        important field:search_attr(value_id的冗余,用于提高检索效率:主要是sphinx方面)

    tableTwo:attribute(商品属性表)

        primary key:attr_id

        foreign key:goods_id

        other field:value_id

    tableThree:salesattribute(销售属性表)

        primary key:salesattr_id

        foreign key:goods_id

        other field:value_id

条件:

    联合统计attribute表和salesattribute表中value_id匹配的goods_id信息

解释:

    value_id数量是多个,每一个value_id都需要统计一次

示例代码:

 

/**

 * @param array $gib

 *

 * array eg. $gib=array(0=>array('id'=>1, 'is_sales'=>1), 1=>array

 * ('id'=>2, 'is_sales'=>2));

 *

 */

foreach($gib as $k=>$v){//$gib代表value_id的集合

    if($v['is_sales']==1){//普通属性

        $attrCountSql = "select count(goods_id) from attribute where value_id = {$v['id']}";

      //run sql...return $attrCount

      $gib[$k]['count'] = $attrCount;

    }else{

        $sattrCountSql = "select count(goods_id) from salesattribute where value_id = {$v['id']}";

        //run sql...return $sattrCount

        $gib[$k]['count'] = $sattrCount;

    }   

}

//每一个vluae_id是唯一的由其他表存放的,每一个商品只有一个value_id匹配。商品与value_id的关系是商品()=>value_id()

//===========这是一种笨办法,仅用此办法解释需求,用过CASE THEN语句,效率并未提高多少,当然,sphinx的方法更高效,统计时间不超过1秒,但是sphinx有一个最大结果集限制,无法满足需求,你懂的,求大神指导,如何进行查询=====

 

求大神指导该如何进行统计,而且可能存在多条件统计,即既要满足value_id=54的商品,又要满足value_id=63的商品的商品ID集合再来统计当前value_id值的个数。很麻烦,百万级数据就超过1分钟很是头疼。求指点

 帮发帖:回帖中请和 @Aeolus风野 交流

加载中
0
归归
归归
请尽量不要在foreach里面写sql语句
Aeolus风野
Aeolus风野
这点我肯定明白,我写了的:此例子仅作为需求解释,实际上我是用case then的方法用1条sql查询的,但效率并没提高太多。
0
Aeolus风野
Aeolus风野
来个大神解答下好么,跪谢!
0
Forza_zh
Forza_zh

引用来自“Aeolus风野”的答案

来个大神解答下好么,跪谢!
跪不出大神的,要供奉才行。。。
0
Aeolus风野
Aeolus风野
哈,好久没看帖子了,该问题已解决,重构数据结构,利用sphinx分组查询,上亿次运算控制在3s内,数据结构非常重要。
返回顶部
顶部