我有一个结构如下的数据表:
id | likes
1 | 2
2 | 5
3 | 2
4 | 6
5 | 2如果想要查找#3旁边的行,我可以使用:
SELECT * FROM table WHERE id >= 3 ORDER BY id然而,我想要做的是按喜欢按表排序。当数据按点赞排序时,如下所示
id | likes
1 | 2
3 | 2
5 | 2
2 | 5
4 | 6当按点赞排序时,如何选择某个id之前或之后的行?例如,对于id 5,我的结果将是前面的行id 3和后面的行id 2。
发布于 2013-07-17 19:07:37
如果likes是唯一的数字,下面的应该是有效的。
上一次:
SELECT * FROM table WHERE likes < (SELECT likes FROM table WHERE id = ID) ORDER BY likes DESC LIMIT 1接下来:
SELECT * FROM table WHERE likes > (SELECT likes FROM table WHERE id = ID) ORDER BY likes ASC LIMIT 1您可以将其中一个更改为<=或>=,然后添加WHERE id != ID
发布于 2013-07-17 19:16:06
顺便说一下,您的第二个表为前两行显示了错误的ids。
它应该是:
id likes
1 2
3 2这对我来说在MySQL中是有效的:
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和其他数据库中可以使用行号。
https://stackoverflow.com/questions/17697826
复制相似问题