我有两个表category和 category_parent
第一个表存的是所有的商品信息(包含日期)
第二个表存的是父子关系,在这两个表里有很多记录
如果有一个记录为rec1,那么,在这个表里查询他的父纪录为rec11,再通过rec11,查他的父rec111,同样再查出rec1111
我想做的事情是查到rec1111这个级别,然后对所有商品的纪录进行分类,然后在我的前台进行表示
因为rec1111这个级别的纪录比较多,而且两个表的的数据量都在几十万以上,并且持续增加中,
所以每次从表里取数据,就非常的慢,以前写普通的sql语句,单纯加索引,速度也是非常慢的。mysql好像并不快。
以下是我现在的解决方法,就是把纪录取出来放到一个临时表,再取再放,最后把每个商品的所有父类的信息取出来。但是mysql的临时内存好像又比较小,客户又不想改变mysql的server配置。现在想知道有没有更好的办法,我的sql水平不高,请大家帮我出出主意叭,上火啊
以下是我现在的sql文
把第一个表里面在某一时间范围的并且type是p的记录取出来,
然后到第二个表里面根据父子关系找出它们的父亲,create temporary table category_pc 
select c.category_id p_id, cp.parent_id c_id, c.from 
from category c, category_parent cp 
where c.category_id = cp.category_id && c.type='p' && ((c.from >= '".$sel_date_from."' && c.from <='".$sel_date_to."')
继续找父亲,又生成一个临时表
create temporary table category_pcs 
select c_pc.p_id, c_pc.c_id, cp.parent_id s_id, c_pc.from, c.name s_name 
from category_pc c_pc, category_parent cp, category c 
where c_pc.c_id=cp.category_id && cp.parent_id=c.category_id";
继续找父亲,又生成一个临时表
create temporary table category_pcsb 
select c_pcs.p_id, c_pcs.c_id, c_pcs.s_id, cp.parent_id b_id, c_pcs.s_name, c_pcs.from, c.name b_name
from category_pcs c_pcs, category_parent cp, category c 
where c_pcs.s_id=cp.category_id && cp.parent_id=c.category_id";

解决方案 »

  1.   

    看得头晕,没看清楚你的需求是什么?好像是递归查询。如果是的话,你可以参考这个贴子。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
    MySQL中进行树状所有子节点的查询如果不是,则 (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。