我有2张数据表a表
有 字段titleb表
也有字段title
a表中有1000条数据,b表中有10条数据要求:查询a表的title,若a.title 在 b.title中,则a.title存入 $array1中,如果sizeof($array1)>5  ,则不存。若 若a.title 不在 b.title中,则 则a.title存入 $array2中,如果sizeof($array2)>5  ,则不存。我的做法
$sql="select title from a"
........
while($tpl2result=mysql_fetch_array($result_sql))
       {
       if(sizeof($array1)<5)
       {
         if($this->guolv($tpl2result['title']))
      array_push($array1,$tpl2result);   
      }
      if(sizeof($array2)<5)
      {
      if(!$this->guolv($tpl2result['title']))
      array_push($array2,$tpl2result);
      }
      if(sizeof($newtalk)==5&&sizeof($newvote)==5)
      {
      break;
      exit;
      }
       }questions: 这种做法极大地浪费了资源,减慢速度,向大师取经。。

解决方案 »

  1.   

    可以google一下sql语句的 join 操作
    select * from a left join b on a.title = b.title
    select * from a right join b on a.title = b.title这样就不需要sql语句来对比两张表了在数据库中,join的效率是很高的
      

  2.   

    就是嘛。你只要a.title表, LEFT JOIN 一次就够了,为NULL的就是不在b表咯。
    长度sql len
    或php判断下咯。
      

  3.   


    好像没错,不过貌似还是select title from a, 不管是不是left on,还是全部查询a,但我只要<=10条就行了,这个不知道了
      

  4.   

    楼主呼吁的大师phpnewnew怎么还不站出来
      

  5.   

    select title from a left join b on a.title=b.title limit 0,10
    貌似这样是限制在10条内了
      

  6.   

    本帖最后由 PhpNewnew 于 2012-02-23 16:48:21 编辑
      

  7.   


    看错题了,不敢回贴了。。 = =
    楼上的不对,应该b LEFT JOIN a 重复的话就group by 这样就不会超10了
    SELECT * FROM b LEFT JOIN a ON a.title = b.title你不是说在b中就存$arr1。不在b中就存$arr2么。那就要取所有数据了。
    感觉怎样都要查询a吧。。
      

  8.   

    你就b LEFT JOIN a 就好了。以b为主。