欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

请问 如何从数据库随机取出一些数,并相加后大于等于100?

程序员文章站 2022-06-11 12:32:45
...
请问 如何从数据库随机取出一些数字数据,并相加后大于等于100?


回复讨论(解决方案)

发现问题好像有点矛盾,换个问法

要从数据库中取出一些数字,这些数字相加的结果要大于或等于100,不限制取出的数量,
举例:可以取出50,50这两个数字,相加等于100;
也可以取出10 , 20 , 20 , 50这四个数字,相加也等于100;
也可以取出10.5 , 20.5 , 30 ,20 , 26 ,这些数字,相加大于100;
或者取出其他相加后可以等于或大于100的数字。

取出的数字是随机的,不管有多少个数字,只要能够等于或大于100就可以

但是,但是一旦等于或大于100,就停止取出,并把已经取出的数字输出到页面上

给你个思路。
第一次,直接取出 100 条。

然后一条一条判断相加是否大于100,如果大于直接跳出。


这种的,只访问一次数据库,节省时间。

只访问一次数据库,节省时间。

不知道哪位师兄有没有更好的办法

select * from tbl_name a where (select sum(field) from tbl_name where id>=a.id) > 100

要求必须有升序的 id 字段辅助

不知道这样做有什么意义

select * from tbl_name a where (select sum(field) from tbl_name where id>=a.id) > 100

要求必须有升序的 id 字段辅助

不知道这样做有什么意义


产品太多了,没办法手工去各种组合计算。为了在各种随机组合的前提下,得到成本、卖价、利润,以便做到心中有数,好做促销活动吗,可是想不到简单有效的方法,我想这种可能会暂用不少服务器资源,所以来请教有没有什么可以提高效率的好办法,还请各位师兄各抒己见哦。

你先把你所谓的低效方法做好!

你先把你所谓的低效方法做好!


哦,我是说,我想的办法可能会占用不少服务器资源,没表达清楚,冒犯了。

现有所谓低效的代码,但能解决问题
然后才可能优化成高效的代码

你都不能准确的说出你要做什么,要经过什么途径去实现,怎么可能会有什么高效的代码

要从数据库中取出一些数字,这些数字相加的结果要大于或等于100,不限制取出的数量,
举例:可以取出50,50这两个数字,相加等于100;
也可以取出10 , 20 , 20 , 50这四个数字,相加也等于100;
也可以取出10.5 , 20.5 , 30 ,20 , 26 ,这些数字,相加大于100;
或者取出其他相加后可以等于或大于100的数字。
取出的数字是随机的,不管有多少个数字,只要能够等于或大于100就可以,但是,一旦等于或大于100,就停止取出,并把已经取出的数据输出到页面上。越简单的办法越好。

这就是我想要请教的。

这种事情本身就不是可由数据库自身完成的
你需要结合程序逐条读取才行

一条查询指令
一个内部有条件判断的 while 循环

我不知道你还要怎么简单

select * from tbl_name a where (select sum(field) from tbl_name where id>=a.id) > 100

要求必须有升序的 id 字段辅助



请问这个要怎么输出

这种事情本身就不是可由数据库自身完成的
你需要结合程序逐条读取才行

一条查询指令
一个内部有条件判断的 while 循环

我不知道你还要怎么简单



我搞定了,虽然斑竹的代码没有直接拿来用(没用过这种写法,搞不明白怎么输出,),不过从中想到一个比我之前写的更简单的,原来我之前的写法太绕了。,以下是代码
$rm=mysql_query("SELECT * FROM `pql_spices` ORDER by rand()");		while ($rmx=mysql_fetch_array($rm)) 		{		  $Total+=$rmx['Price'];		  if ($Total>=100)break;		  echo $rmx['id']."、".$rmx['title'];		  echo "
"; } echo $Total;


select * from tbl_name a where (select sum(field) from tbl_name where id>=a.id) > 100
如果可以的话,还请斑竹教下这个要怎么输出,谢谢。

你这不就是我说的
一条查询指令
一个内部有条件判断的 while 循环
吗?

至于那条指令,你在管理器中执行一下就知道是怎么回事了