存储数字列表并检索它们的最佳方法

时间:2010-03-25 20:12:32

标签: database search random

存储随机数列表(如乐透/宾果号码)并检索它们的最佳方法是什么?我想在数据库中存储多行,其中每行包含5-10个数字,范围从0到90.我将存储大量这些行。我希望能够检索到新生成的行共有至少X个数字的行。

示例:

[3,4,33,67,85,99]
[55,56,77,89,98,99]
[3,4,23,47,85,91]

那些在DB

我会生成这个: [1,2,11,45,47,88]现在我想获得与此号码至少有1个号码的行。

最简单(最愚蠢?)的方法是选择6并检查相似的结果。

我想用大二进制字符串存储数字 000000000000000000000100000000010010110000000000000000000000000有99个数字,其中每个数字代表一个从1到99的数字,所以如果我在第44个位置有1,则意味着我在该行上有44个。这种方法可能会将困难的任务转移到Db,但它又不是很聪明。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

你应该像这样创建一个表:

TicketId Number
1        3
1        4
1        33
1        67
1        85
1        99
2        55
2        56
2        77
etc...

然后,您的查询(至少对于X = 1)变为:

SELECT DISTINCT TicketId FROM Ticket WHERE Number IN (1, 2, 11, 45, 47, 88)

这样做的好处是您可以使用索引而不是全表扫描。

对于大于1的X,您可以执行以下操作:

SELECT TicketId, COUNT(*) AS cnt
FROM Ticket WHERE Number IN (1, 2, 11, 45, 47, 88)
GROUP BY TicketId
HAVING COUNT(*) >= 3

再次,这将能够使用索引。