0

我想在我的Android应用程序中表示播放列表。如果播放列表是空的,我的项目只是按日期显示。如果播放列表中包含一些项目,则应按顺序显示播放列表,然后依次显示剩余项目(仍按日期)。在SQLite数据库中表示LinkedList

但是,我不知道如何有效地建模。我怎样才能以一种方式构建我的数据库,以便在播放列表中插入项目(到任何位置)变得很容易,并且仍然以快速(合理的简单)方式选择它们。

示例我有一个项目A,B,C,D,E,F,G的列表。首先按顺序显示项目:

A,B,C,D,E,F,G 

用户现在将F和D添加到他的播放列表中。该项目现在应该按此顺序显示:

F,D,A,B,C,E,G 
+0

select * from items_table – 2013-02-20 19:56:49

回答

0

我怎么能组织我的数据库,以这样的方式,因此变得容易 插入项目(任意位置)

创造经典heap table它提供快速插入 - “插入您可以插入的第一个位置。”

并且仍然以快速(且合理的简单)方式选择它们。

所以很可能你需要创建index。索引创建在最常发生在where clause后面的列上。通过创建索引也是b+ tree创建,所以你要小心,当你想创建任何索引。

而且有更多的方法,但它强烈地依赖于数据源类型,例如Oracle提供了多种类型的各种优点和缺点表。

你会选择另外的具体做法也取决于数据库 - 分贝的要求,在桌等记录的平均数。

+0

听起来不错,但是如何创建一个select语句以正确的顺序获取这些项目?没有任何特殊的模块或Android不支持的东西。 – Markus 2013-02-20 19:06:28

+0

所以有时需要做出“妥协”。你刚刚描述的你是正确的,它不可能在db中完成。所以我的第一个想法是做经典的有序选择,但如果你在播放列表中有一些项目 - 所以从他们那里得到一些特定的数据(例如id),以便能够执行下一个查询,选择播放列表中的项目(将它们保存为经典列表)和第二个查询将从数据库中选择其他项目(项目将保存到前一个选择列表)。 – Sajmon 2013-02-20 19:14:14

0

如果你想基于某种时间戳的订购物品(比如你要最新的,以先出现),则只需添加一个时间戳列的表,如创建日期或更新日期/时间。然后,在查询表格时,使用它进行排序。

SELECT * FROM ITEMS_TABLE 
ORDER BY CREATION_DATETIME DESC; 
0

我正在使用此解决方案。我在表格中添加了一个额外的列,比如说“序列”,它将具有订单号,在该序列号中提取记录。当按照“序列”提取订单时,您将获得期望的订单。

但插入一行或删除一行需要大量的序列更新。