【问题标题】:How to shuffle a table of records in Delphi?如何在 Delphi 中打乱记录表?
【发布时间】:2015-02-27 15:27:16
【问题描述】:

我有一个问题表,每个问题都有一个类别,我想查询数据库以首先找到特定类别的问题,然后从该类别中检索一个随机问题。我打算通过改组所有记录来做到这一点,以便它们在表中没有特定的顺序,然后找到第一个具有我正在寻找的类别的问题。 我知道这会起作用,我只是不知道如何打乱表中的所有记录以使它们以随机顺序排列。有人对如何做到这一点有任何想法吗?或者我可以使用的替代方法?提前致谢。 - 乔治

【问题讨论】:

  • 如果 table 你的意思是 database table 你不能 shuffle the records in a table >记录你的意思是。数据库不理解“洗牌”。许多 SQL 方言提供了一个 RANDOM() 函数,您可以使用该函数为人工列生成伪值,您可以按该列排序,或者您可以将每一行的 ID 值检索到 Delphi 中的数组中,打乱该数组,从随机数组元素中检索一个值,并使用它从数据库中查询和检索匹配的行。如果您可以提供表格定义并确认您的要求,我们可能会提供帮助。
  • 从 MySQL 表中获取随机结果:stackoverflow.com/q/16928079/33732
  • 不要把你的问题放在数据库里。我真的是说不要。这样做您将为您的数据库创建大量工作。而是根据特定类别过滤您的所有问题。然后生成从 0 到过滤的数据库记录数的随机数。然后从您的 qustions 过滤列表中检索 N'th qustion。现在我不知道如何使用数据库来实现这一点,因为我对使用它们的知识很少,但我仍然理解如何做到这一点的逻辑。

标签: mysql delphi random shuffle records


【解决方案1】:

通常,这取决于您的数据库。举个例子,在 Oracle 中,您可以使用

打乱记录
select <fields>
from questions
where <some-conditions>
order by dbms_random.value

但我怀疑它是否是好的方法。如果您愿意,您应该查询“给我每个类别的一个随机问题”,或者,更接近实际任务,只需获取所有问题并在客户端上进行一些过滤。

【讨论】:

  • 判断我的问题标签,数据库已知是 MySQL。
  • 您为什么怀疑这是一个好方法?你不能不解释就这么写。
  • 我在上面的评论中提到了 RANDOM,如果您唯一的内容是完全错误的数据库的相同信息(问题被明确标记为 MySQL),我看不出这如何在这里增加任何价值.
猜你喜欢
  • 2013-10-17
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多