【问题标题】:SQLite Android Select Random Row Excluding Certain ColumnsSQLite Android选择排除某些列的随机行
【发布时间】:2019-03-17 04:42:17
【问题描述】:

是否可以从 SQLite 表中选择随机行,但是使用 Android rawquery 随机排序,该行仅返回该行的特定列信息?示例:

表1

  C1      Col2   Col3    Col4

1 A       B      C       D

2 E       F      G       H

3 I       J      K       L

4 M       N      O       P

5 Q       R      S       T

6 U       V      W       X

是否可以在 1 到 6 之间随机选择一行,不包括 C1 和 C3 列,从而返回:

J,L 或 N,P 或 V,X 等...

任何可以完成此操作的原始查询 SELECT 语句示例?

【问题讨论】:

  • 没有第一行和最后一行,至少不只是根据您发布的数据。你需要告诉我们哪个column决定了哪一行是第一行和最后一行。
  • 谢谢蒂姆,我只需要知道,例如,如果第 2 行是随机选择的,那么选择 F 将与选择 H 一起选择。假设选择 F 是描述选择 H 的标签,所以我需要他们在一起。它只是一次选择的一行,所以我不关心行顺序。我本可以在问题中更清楚地解释这一点。我很抱歉。
  • 很遗憾,您没有回答我的问题。哪个列确定哪一行是“第一”,哪一行是“最后”?
  • 道歉。可以说是 C1。
  • 那么我的答案是一种可能的解决方案。

标签: android sqlite random


【解决方案1】:

这里有一个选项,它假定C1 列决定了排序:

SELECT Col2, Col4
FROM yourTable
WHERE C1 <> (SELECT MIN(C1) FROM yourTable) AND
      C1 <> (SELECT MAX(C1) FROM yourTable)
ORDER BY RANDOM()
LIMIT 1;

【讨论】:

  • @TimBiegelisen 我选择了你的答案,因为它看起来非常完整,如果需要我会尝试实现它。但是,正如我上面所说,我最终使用了列表视图的列索引,但现在我需要填充 TextViews 而不是 ListView。我为此提出了一个新问题。再次感谢。
【解决方案2】:

你可以使用这个查询

SELECT Col2, Col4 FROM yourTable ORDER BY RANDOM() LIMIT 1;

【讨论】:

  • 我最终只是调用了列索引,它正在产生所需的结果,就填充 ListView 而言。我刚刚发布了另一个关于使用信息填充 textViews 而不是 ListViews 的问题。
【解决方案3】:

不建议在 Db 查询中使用 Random,因为如果您的数据太大,这可能是非常昂贵的操作。 如果它是 100 行,那么可能你可以做任何你想做的事情。

随机查询遍历整个数据库生成随机行

您可以分两步完成 1)查找行数 2) 使用 Math.random 从 1 到 count-1 计算一个随机数; 然后将查询用作:

SELECT column FROM tableName LIMIT $random_number, 1

两者的过程是相同的,但是在 sql 查询中获取随机数是昂贵的,然后使用 Math.random() 获取它

【讨论】:

  • 我很欣赏这个建议。如果它更有效,我会尝试它。到目前为止,random() 一直在为我工作。
猜你喜欢
  • 2012-08-29
  • 2011-05-06
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多