脚本输出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
+-----------------------+
答案 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子句来选择第一个和第一个之间的中奖票。最后的票号。