Mysql选择前n行whilte count x

时间:2013-11-11 07:08:47

标签: mysql select count while-loop

我有一个名为itemCount的列表,我想在SUM(itemCount)小于y时选择前n行。

+----+-----------+
| id | itemCount |
+----+-----------+
|  1 |         5 |
|  2 |        10 |
|  3 |         1 |
|  4 |        20 |
+----+-----------+

让我们说y=15所以在这种情况下,我想要前两行SUM(itemCount)<=15 我需要这样的东西:

SELECT * FROM `tbl_mail_queue` LIMIT 0,(select count(id) from `tbl_mail_queue` m where SUM(m.`count`)<=15)

这可能吗?

更新:

我正在创建一个电子邮件队列系统,我的系统发送的每封电子邮件都存储在此表中。每封电子邮件都有多个收件人,我不想将每个电子邮件行分成1个收件人(其中一个发送电子邮件的模块是时事通讯,每封邮件可以有几十个甚至几百个收件人,我只将它们分成50个收件人堆栈)所以在我的电子邮件表中我有一个列,告诉我有多少收件人发邮件。

所以每行的计数列可以有1到50的值,现在我想每隔几分钟发送50封电子邮件,这里是我需要此查询选择前50个电子邮件的地方,可以包含在1个或更多(n )行。

1 个答案:

答案 0 :(得分:7)

是的,它是:

SELECT 
   test.id,
   test.itemCount 
FROM 
   test 
     LEFT JOIN 
       (SELECT 
         id, 
         @sum:=@sum+itemCount AS current_sum 
        FROM 
          test 
          CROSS JOIN(SELECT @sum:=0) AS init) AS sums 
     ON test.id=sums.id 
WHERE sums.current_sum<=15;