查找由非唯一列排序的MySQL表中的下N行

时间:2012-12-13 12:19:45

标签: mysql select

我找不到办法做到这一点,我不知道如何搜索这个问题,因为我发现的并不是我想要的,答案也不适用。

我有一个包含两个字段(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

但它不是很漂亮。

3 个答案:

答案 0 :(得分:2)

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

SELECT * FROM table ORDER BY char,num LIMIT 4, $N

答案 1 :(得分:0)

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

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

你不能说char&gt; somechar

答案 2 :(得分:0)

根本问题在于您没有描述您的选择标准。

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

一旦您可以定义该记录的特殊内容以及您希望从那里开始的原因,此处的某人将能够帮助您编写查询以查找该记录。否则,我们都只是在猜测。