我连初学者都不算,我只是在用我自认为懂得的一点系统函数在做些东西,  然后 我现在遇到了一个问题, php函数命名吧。   我有4个分类,然后我需要在一个页面显示4各分类的内容,1个类10条,  我用这样的语句$cartlist="SELECT * FROM `data` WHERE cart like '%汽车%' order by sid desc limit 0,10";
$querycart=mysql_query($cartlist);
$num=1;
$cartlist="";
while($row=mysql_fetch_array($querycart)){
$cartlist .='<li><span>'.$num++.'.</span><a>'.$row['title'].'</a></li>';
}以上代码我用着没问题,    我的问题是  这是显示一个分类的方法, 我这一页要显示4个  然后我第二个分类这么写
$cartlist="SELECT * FROM `data` WHERE cart like '%汽车%' order by sid desc limit 0,10";
$querycart=mysql_query($cartlist);
$num=1;
$cartlist2="";
while($row=mysql_fetch_array($querycart)){
$cartlist2 .='<li><span>'.$num++.'.</span><a>'.$row['title'].'</a></li>';
}我只把循环处的$cartlist改了个名字   然后这样复制了4次 (高手应该开始感觉纠结了。。)
想问,4次执行sql语句所命名的函数名$cartlist没变,这样会有什么问题吗不过这样写目前我用着没什么问题,可以正常执行, 因为我知道代码执行是从上到下的有顺序的,所以后边命名如果有新的定义 就会按新的语句来执行吧?  但是不知道命名相同的函数名到底是否可用其实正常的程序肯定不会这么乱糟糟的,所以 我帖子开头就说了那句话。  虽然我是问给函数取相同名称是否可用,  不过高手如果愿意给我指点下这样的版块分类显示该怎么写才正确  那我先真心谢谢了   这样的代码执行效率肯定很低吧 相同的结果 却分开段代码执行。。

解决方案 »

  1.   

    我个人觉得,最好你的分类用id存储
    然后一次把 4个分类的数据都读取出来
    然后处理数组,而不是去读4次数据库例如
    $row就是你从数据库度出来的所有数据
    foreach($row as $key=>$value)
    {
     $array[$value['cart']][] = $value;
    }
    假如cart = 1就是汽车的分类
    那么 $array[1] 就是对应的数据
    纯属个人意见
      

  2.   

    回复楼上的朋友们,  我的数据是放在一个表的, 然后分类专门一个字段, 如:我要查cart字段为'汽车'的  就复制一段代码查汽车  然后查'火车'的, 就又复制一段查火车的,  数据都在一个表  只是查的字段内容不一样,然后2楼的我有点没看懂,  3楼说的其实我很需要用  可是那更不会   分表操作真不知该怎么弄还是先把这个问题解决了再处理分表的问题吧
      

  3.   

    我的意思是 先一次性把 4个分类的数据读取出来
    然后再处理数组
    data表的cart存分类表的id
    分类表(id,c_name)(1,'汽车')(1,'火车')等等$sql = "SELECT * FROM `data` WHERE cart = 1 limit 10 union all SELECT * FROM `data` WHERE cart = 2";
    $res = mysql_query($sql);
    while($rs = mysql_fetch_array($res))
    {
      $array[$rs['cart']][] = $rs;
    }
    $array[1]就是 汽车分类的数据
    $array[2]就是 火车分类的数据使用从表的话 
    不会有太多冗余的数据 
    查询也比较快 
    而且还方便使用 要改分类名的时候只需要改从表的名称就行还有什么地方不明白的??
      

  4.   

    这样是没有问题的第二次给变量$cartlist赋值时,之前的值已经被抛弃了,后边的语句跟你第一次给他赋的值已经无关了所以是没有问题的.
    高手们的意思是,你可以在数据库中给每条记录加一个字段,识别它是哪一类这样你就可以一次性把所有数据查出来,一条条分析它们是哪一类的,然后归类到不同的数组中作为结果
    这样做的好处是 只用查一次数据库.因为在php程序中,查询数据库耗时最多,所以宁愿只查一次,然后用php语句去分析结果,后者也耗时但是比查询另外三次 效率还是高得多.
      

  5.   

    回复:zhangbin1988 的帖子
      谢谢你给出方法, 我还不知道union all这个函数呢,,union all合并多个SELECT语句的结果, 弱弱的问一句  $array[$rs['cart']][] = $rs;接下来该怎么用呢。。 
    一些简单的单条查询语句什么的我还可以  回复:anyilaoliu 的帖子
     恩, 知道了, 这样可以用   不过这样用的代码还是不好的吧  一个表里的4个分类要查询4次 那要再多些 这样的查询方法...
      

  6.   

    真的需要很有耐心的教你才行啊$array[1]就是 汽车分类的数据
    foreach($array[1] as $key => $value){
        $cartlist2 .='<li><span>'.$key.'.</span><a>'.$value['title'].'</a></li>';
    }
    $cartlist2 就等于 你写的  汽车分类的 html
    还有什么地方不明白嘛??
      

  7.   


    刚才小睡了一下,是在太困了。  起来就研究你给的代码,但是怎么样还是不行  提示Undefined offset: 1,  就是$array[1]这个,   我print_r($array[$rs['cart']][] = $rs);时可以看到分类1的数组, 
    我这段的完整代码
    $sql = "SELECT * FROM `data` WHERE cart like '%汽车%' limit 10 UNION ALL SELECT * FROM `data` WHERE cart like '%火车%' limit 10";
    $res = mysql_query($sql);
    while($rs = mysql_fetch_array($res))
    {
    $array[$rs['cart']][] = $rs;
    foreach($array[1] as $key => $value){
        echo '<li><span>'.$key.'.</span><a>'.$value['title'].'</a></li>';
    }
    }不知道是不是我把代码用错了
    新手真的要先多学习再实践呀,而且不机灵的教起来也费劲   
    我网上查UNION ALL这函数也没什么实例给参考  真要搞不定  就用4次代码查询4次好了  同样能达到目的 现在先把东西做出来了再学一下php 再优化代码   等你回复一个我就结贴了  菜鸟 伤不起呀
      

  8.   

    由于你有 limit 子句,所以你原本的代码是正确的
    虽然整段的复制代码不甚好看,但简单且有效!你#10的代码中,sql 指令串是有问题的
    在联合查询的于狱中,每节都有 limit 10 ,这将导致最终查询的结果只有10条。显然不是你所希望的
      

  9.   

    因为你的数据里面cart不是数字 而是中文 汽车、火车等等
    所以$array[1]为空,循环会出错的