首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按不同字段排序时,如何在sql中选择相邻行?

问按不同字段排序时,如何在sql中选择相邻行?
EN

Stack Overflow用户
提问于 2013-07-17 18:51:10
回答 2查看 1.3K关注 0票数 4

我有一个结构如下的数据表:

代码语言:javascript
复制
id |   likes
1  |     2
2  |     5
3  |     2
4  |     6
5  |     2

如果想要查找#3旁边的行,我可以使用:

代码语言:javascript
复制
SELECT * FROM table WHERE id >= 3 ORDER BY id

然而,我想要做的是按喜欢按表排序。当数据按点赞排序时,如下所示

代码语言:javascript
复制
id |   likes
1  |     2
3  |     2
5  |     2
2  |     5
4  |     6

当按点赞排序时,如何选择某个id之前或之后的行?例如,对于id 5,我的结果将是前面的行id 3和后面的行id 2。

EN

回答 2

Stack Overflow用户

发布于 2013-07-17 19:07:37

如果likes是唯一的数字,下面的应该是有效的。

上一次:

代码语言:javascript
复制
SELECT * FROM table WHERE likes < (SELECT likes FROM table WHERE id = ID) ORDER BY likes DESC LIMIT 1

接下来:

代码语言:javascript
复制
SELECT * FROM table WHERE likes > (SELECT likes FROM table WHERE id = ID) ORDER BY likes ASC LIMIT 1

您可以将其中一个更改为<=或>=,然后添加WHERE id != ID

票数 1
EN

Stack Overflow用户

发布于 2013-07-17 19:16:06

顺便说一下,您的第二个表为前两行显示了错误的ids。

它应该是:

代码语言:javascript
复制
id    likes

 1    2 

 3    2

这对我来说在MySQL中是有效的:

代码语言:javascript
复制
Select id, likes from (SELECT id, @rownum:=@rownum+1 AS rownum, likes
FROM table u, (SELECT @rownum:=0) r ORDER BY likes) as derived  where
rownum >= 2 and rownum <= 4;

(SELECT id, @rownum:=@rownum+1 AS rownum, likes FROM table u, (SELECT
@rownum:=0) r ORDER BY likes);

最后一部分尝试模拟行号,在MySQL中缺少行号,但在MSSQL、Oracle和其他数据库中可以使用行号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17697826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档