【问题标题】:How to select a random piece of data in a pool of data in a database using MySQL如何使用 MySQL 在数据库的数据池中选择随机数据
【发布时间】:2021-07-03 18:56:37
【问题描述】:

我创建了两张表,一张用于存储人员,另一张用于存储他们选择的 5 个数字。现在,每个人都可以输入自己喜欢的任意数字,他们的五个数字与他们的personid相对应。我的目标是创建代码,从一组数字中选择一个随机数,比如说 4 个人。

Person
    personid(PRIMARY KEY)
    name

numberlist
    numid(PRIMARY KEY)
    personid(FOREIGN KEY)
    num1
    num2
    num3
    num4
    num5

我有以下疑问:

    SELECT num1,num2,num3,num4,num5 
    FROM Project.numberlist
    ORDER BY RAND ()
    LIMIT 1

代码有效,但会输出随机行。一个示例输出是:

[(12, 15, 23, 54, 7)]

如何设计查询以使其仅输出一个数字?对于这个例子,它会随机输出一个数字,比如 23 或 15,而不是整行。

【问题讨论】:

  • 首先修复您的架构,以便您选择随机行,而不是随机列
  • 那是否意味着我必须创建三个表而不是两个?
  • 不一定。您仍然可以有两个表,但您的第二个表将被规范化(例如id,num_id,person_id,val),其中 id 是 PRIMARY,并且 (num_id,person_id) 是 UNIQUE。

标签: mysql database list random syntax


【解决方案1】:

我建议“取消透视”您的 5 个数字列,以便它们形成一列:例如

SELECT num1 as num FROM Project.numberlist union all
SELECT num2 as num FROM Project.numberlist union all
SELECT num3 as num FROM Project.numberlist union all
SELECT num4 as num FROM Project.numberlist union all
SELECT num5 as num FROM Project.numberlist
ORDER BY RAND ()
LIMIT 1

考虑规范化您的数据模型,以避免这些变通方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 2019-03-25
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多