Sqlite Scrolling Cursor 如何在重名的情况下正确滚动

标签 sql sqlite scroll cursor

我已经使用 SQL Lite 和 C# 实现了一个滚动游标。 好吧,我只是在 SQL Lite 工具中使用 SQL 进行测试。

所以我让它在以下位置运行滚动光标:

http://sqlite.org/cvstrac/wiki?p=ScrollingCursor

所以我有这个工作,但结果不正确。

SELECT title FROM tracks
     WHERE singer='Madonna'
       AND title>:lasttitle
     ORDER BY title
     LIMIT 5;

假设这些是我的跟踪表中的字段:

轨道编号 歌手 标题 媒体格式

然后说我有一堆记录()

4    Madonna    <All my love demo>    .mp3
2    Madonna    <Be cool demo>    .wav
7    Madonna    <Like a Virgin>    .aaf
1    Madonna    <Like a Virgin>    .adi
5    Madonna    <Like a Virgin>    .mp4
11    Madonna    <Like a Virgin>    .wmv
3    Madonna    <Like a Virgin>    .mp5
8    Madonna    <Like a Virgin>    .mp6
10   Madonna    <Like a Virgin>    .mp7
9    Madonna    <Like a Virgin>    .mp8
6   Madonna    <Like a Virgin>    .mp9

所以基本上我有相同标题的无限记录,只要 media_format 不同,media_format 使它们独一无二。

记录按标题排序(如您在查询中所见),因此唯一 ID 没有按顺序排列。

当向前滚动以获取最后一个标题所在的下 5 条记录时,我该如何做滚动光标

假设我已经将第一页加载到我的 C# 应用程序中,然后我在 lastitle 变量中向前滚动

它不会给我正确的记录。 所以如果我将大于 > 更改为大于或等于 >= 那么它将给我 5 条记录,从第一次出现开始,但我需要它从记录 6 开始

我需要看看:

第 1 页

4    Madonna    <All my love demo>    .mp3
2    Madonna    <Be cool demo>    .wav
7    Madonna    <Like a Virgin>    .aaf
1    Madonna    <Like a Virgin>    .adi
5    Madonna    <Like a Virgin>    .mp4

第 2 页

11    Madonna    <Like a Virgin>    .wmv
3    Madonna    <Like a Virgin>    .mp5
8    Madonna    <Like a Virgin>    .mp6
10   Madonna    <Like a Virgin>    .mp7
9    Madonna    <Like a Virgin>    .mp8

最佳答案

您的记录必须完整有序。

如果 WHERE 过滤器中的列(此处:singer/title)可以识别多条记录,则必须添加其他列以使过滤器唯一。 在您的情况下,这可能是 media_format,但如果您的程序不知道可以使用其他什么列,它应该只使用主键(track_idrowid).

如果按多列排序,WHERE 表达式会变得更加复杂。 以下表为例,按 XY 排序:

X Y
- -
A 1
A 2  <- last record on previous page
A 3
B 1
B 2

要获取前一条记录之后的所有记录,您必须搜索具有相同X 值和更大Y 值的记录,或者具有更大X 值:

SELECT *
FROM MyTable
WHERE (X = 'A' AND Y > 2)
   OR (X > 'A')
ORDER BY X, Y

在您的示例中,这将是:

SELECT *
FROM tracks
WHERE singer = 'Madonna'
  AND ((title = :lasttitle AND media_format > :lastformat) OR
        title > :lasttitle)
ORDER BY title, media_format
LIMIT ...

关于Sqlite Scrolling Cursor 如何在重名的情况下正确滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082956/

相关文章:

javascript - 锚定在两列行中的可滚动 DIV 内

MySql XOR 更新 - 比较行并更新值

php - 是否有任何常见的 PHP 类用于将 SQL 结果集转换为 json

php - 加载数据infile问题

mysql - Wordpress 一直在执行这个 SQL 查询?

javascript - 将多边形类型的数据存储在 `SQLite`数据库中

android - android.content.Context.getSharedPreferences(java.lang.String,int)'在null对象引用ID DBhandler上

javascript - 通过 Javascript 从其他页面平滑滚动

android - 转发触摸事件并在 android 中保持动力

sql - groovy sql eachRow 和 rows 方法