【问题标题】:shuffle in database table using id使用 id 在数据库表中随机播放
【发布时间】:2012-01-20 10:38:40
【问题描述】:

如何在android中打乱sqlite数据库表的id。并显示或检索具有各自洗牌的表 id 的数据。

例如:在 programmer 表中: id:1,2,3 和level:分别是实习生、初级和高级。

我的意图是将这些 id 与相应的级别打乱。如果首先使用初级加载 id 2,那么如果我单击下一步,它可能会显示 1 或 3 以及接受级别,依此类推。

我是安卓新手。提前致谢。

【问题讨论】:

  • [查看这里][1] [1]:stackoverflow.com/questions/7831857/…
  • 你真的需要改变 id's 或者只是 wana cursor 随机顺序的数据? 2.你可以使用SELECT * FROM table ORDER BY RANDOM()
  • 我想随机播放这些 id。

标签: android


【解决方案1】:

在 sqllite 中没有直接的数据混洗方法,但您可以使用以下方式:::

  1. 首先从数据库中获取 ID。
  2. 然后使用 Java Collection API 进行随机播放(例如 :: Collections.shuffle(shuffleList); )
  3. 最后用 Shuffle 列表更新数据库。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    Ajay 的解决方案确实非常有效。

    从观察开始,我们可以根据集合检索表的 id(例如计数 5):

    select *
    from table_name
    where _id in (4, 1, 2, 5, 3)
    

    我们可以得出这样的结果,如果我们可以生成字符串“(4, 1, 2, 5, 3)”,那么我们将有一个比 RAND() 更有效的方法。

    例如,在 Java 中:

    ArrayList<Integer> indices = new ArrayList<Integer>(rowsCount);
    for (int i = 0; i < rowsCount; i++) {
        indices.add(i);
    }
    Collections.shuffle(indices, new Random());
    String inClause = indices.toString();
    inClause = inClause.replace('[', '(').replace(']', ')');
    

    如果 ids 有间隙,那么初始的 arraylist "indices" 是对 ids 的 sql 查询的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-22
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多