Mysql之间找到一个值

时间:2016-11-09 13:40:53

标签: mysql node.js

脚本输出0到5000之间的随机值(中奖票)(在这种情况下)。让我们拿3001.我需要一个查询来取id = 4行,因为它有获胜的票。我该怎么办?

更多信息:

id 1 has tickets from 0 to 1000
id 2 has tickets from 1000 to 2000
id 3 has tickets from 2000 to 3000
id 4 has tickets from 3000 to 3500 <----- The winning ticket
id 5 has tickets from 3500 to 5000

Mysql表:

+-----------------------+
| id | Userid  | Ticket |
+-----------------------+
| 1  | 1234567 | 1000   | // 0 to 1000
| 2  | 1234567 | 1000   | // 1000 to 2000
| 3  | 1234567 | 1000   | // 2000 to 3000
| 4  | 9876543 | 500    | // 3000 to 3500
| 5  | 1234567 | 1500   | // 3500 to 5000
+-----------------------+

1 个答案:

答案 0 :(得分:0)

以下查询是否适合您:

set @winningticket=3001;
set @cstart=0;
SELECT id, Userid, (lastticket-tickets+1) firstticket, lastticket
FROM
(
SELECT id, Userid, Ticket as tickets, (@cstart := @cstart+Ticket) lastticket
FROM mytable
order by id) a
having @winningticket between firstticket and lastticket;

我假设id = 1的门票从1-1000,id = 2的门票从1001到2000 - 而不是你给的值 - 否则门票1000由id = 1和id = 2拥有, 2000由id = 2 AND id = 3等 - 如果不正确,则从firstticket&amp;的计算中删除+1。价值观将与你的价值相匹配。

内部子查询使用用户变量为该ID拥有的最终票号创建累计总计。

外部查询计算起始票号 - 请注意,这不能在内部查询中可靠地完成,因为第一个&amp;最后的票号都依赖于相同的用户变量&amp;不保证列的评估顺序&amp;如果以任何方式对其进行修改,建议不要在选择列表中使用相同的用户变量。

外部查询使用having子句来选择第一个和第一个之间的中奖票。最后的票号。