2

我找不到办法,也不确定如何搜索这个问题,因为我发现的并不是我想要的,而且答案也不适用。

我有一个包含两个字段(char 和 num)的表,'num' 是唯一的,但 'char' 不是,如示例所示:

char | num
_________
a    | 2
b    | 1
c    | 3
c    | 4 <-- I am here
c    | 7
c    | 8
d    | 5
e    | 9
f    | 6

我想要的是从用'char'排序的表标记的行开始获取N行。

我在用着

SELECT * FROM table WHERE char >= $current_char ORDER BY char,num LIMIT $N

但它不符合我的要求,因为它从 char='c' 和 num='3' 的行开始。

编辑:我可能会计算并使用 xdazz 的答案,因为代码会更清晰,但看起来我可以这样做:

SELECT * FROM table WHERE char > $current_char OR (char = $current_char AND num >= $current_num) ORDER BY char,num LIMIT $N

但它不是很漂亮。

4

3 回答 3

2

您标记<-- I am here意味着您知道这是第四条记录,因此您可以这样做:

SELECT * FROM table ORDER BY char,num LIMIT 4, $N
于 2012-12-13T12:25:28.787 回答
0

根本问题是你没有描述你的选择标准是什么。

您已表示要从标记为 的记录开始<-- I am here,但尚未定义该记录与任何其他记录的区别。

一旦您可以定义该记录的特殊之处以及为什么要从那里开始,这里的人将能够帮助您编写查询以查找该记录。否则,我们都只是猜测。

于 2012-12-13T13:29:22.807 回答
0

你用过where char >= current_char,但是你说它们不是唯一的,它可以是第 5 行或第 6 行,而是使用这样的唯一行

     SELECT * FROM table WHERE num >= $current_num ORDER BY char LIMIT $N

你不能说 char > somechar

于 2012-12-13T12:30:32.003 回答