database - 存储数字列表并检索它们的最佳方式

标签 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]

那些在数据库上

我将生成这个: [1,2,11,45,47,88] 现在我想获取至少有 1 个与此相同的数字的行。

最简单(也是最愚蠢?)的方法是进行 6 个选择并检查是否有相似的结果。

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

有什么建议吗?

最佳答案

您应该创建一个像这样的表:

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)

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

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

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

这将再次能够使用索引。

关于database - 存储数字列表并检索它们的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519014/

相关文章:

mysql - 数据集 : xml or mysql faster?

java - 在 Java 中选择 N 个随机不同整数的高效方法?

c - 它总是第一个坦克

javascript - 如何使用 Dojo 实现实时搜索/搜索建议?

带有关键字的 Html 搜索框打开页面

c - 为什么我有段错误?

python - 试图将大量数据输入 mysqldb

java - 如何以可扩展的方式仅将唯一记录添加到数据库中

mysql - 从同一张表中查找相似数据

database - Elasticsearch ,多个索引与一个索引和不同数据集的类型?