我在做一个项目的时候用到一个这样的查询
其中一条记录里有一个名为answer_count的字段,里面记录的都是数字,我想从表中随机的抽取5条记录,同时让这五条记录的answer_count字段值加起来为50这个条件;这个语句我只写了一般 也就是能够随即的得到5条记录,但是满足后面的条件就写不出来了,请大侠们多多指教
select * from tiankong order by rand() limit 5 ;随即取得5条记录  成功执行
select * from tiankong order by rand() limit 5 group by  __不知道如何写___  having sum(answer_count)=7;失败

解决方案 »

  1.   

    理论上你可以用下面的语句来实现。 但实现上除非你的表中仅有少数记录,否则根本无法忍受这个语句的效率。
    select *
    from tiankong t1,tiankong t2,tiankong t3,tiankong t4,tiankong t5
    where t1.answer_count+t2.answer_count+t3.answer_count+t4.answer_count+t5.answer_count = 50
    and t1.id<t2.id
    and t2.id<t3.id
    and t3.id<t4.id
    and t4.id<t5.id
    一般来说的算法(在N个数中间找出M个数之各恰为X),是通过程序来递归实现。 网上有现在的程序算法,不建议在数据库中来实现。即使用程序也是很消耗资源的。
      

  2.   

    谢谢楼上的指点,我感觉 group by 后面 我们是不是可以虚拟出一个字段来 作为sum()拟合分组的参考,然后用having进行判断
      

  3.   


    这种方法走不通。
    这个语句的机制是先让MYSQL随机选5条记录(记住这个时候记录已经选好!)然后再判断它们的和是否=50其实你想想如果你手工来做会怎么做?
      

  4.   

    谢谢大家 我写了一个函数来判断
     $mysql=new mysql();
             $con=$mysql->connect();   $sql_tiankong="select * from tiankong where del='false' order by rand() limit 5";
      $tiankong_contants=$mysql->dosql($con,$sql_tiankong);
      $lang=count($tiankong_contants);
      $kong_count=0;//填空的个数
      for($i=0;$i<$lang;$i++)

      echo $tiankong_contants[$i][4];
      $kong_count=$kong_count+$tiankong_contants[$i][4];  
    }
    echo $kong_count;
    if($kong_count==50)//要求的空为10个
    {
    echo "找到了";

    }
    else
    {
    findTiankong();
    }
      

  5.   

    上面写错了一个地方 具体的递归实现函数为:
    function findTiankong()//查询到合适的填空题
    {
    $mysql=new mysql(); 
            $con=$mysql->connect();   $sql_tiankong="select * from tiankong where del='false' order by rand() limit 5"; 
      $tiankong_contants=$mysql->dosql($con,$sql_tiankong); 
      $lang=count($tiankong_contants); 
      $kong_count=0;//填空的个数 
      for($i=0;$i <$lang;$i++) 

      echo $tiankong_contants[$i][4]; 
      $kong_count=$kong_count+$tiankong_contants[$i][4];  

    echo $kong_count; 
    if($kong_count==50)//要求的空为10个 

    echo "找到了"; } 
    else 

    findTiankong(); 
    }