简体   繁体   English

在SQL中模拟环(代数)

[英]Simulate ring (algebra) in SQL

I'm creating small profile viewer and I want to simulate ring in SQL. 我正在创建小型配置文件查看器,我想在SQL中模拟铃声。 How it works? 这个怎么运作? For simple: I have 5 users on my table. 简单来说:我的桌子上有5位用户。 When I get one from middle to my experiment (like user number 2,3,4) next and previous user is CURRENT_USER_ID +- 1. But when I choose user number 1 or 5 it's not that simply like before. 当我从中间到实验(如用户号2、3、4)中的一个时,下一个和上一个用户为CURRENT_USER_ID + -1。但是,当我选择用户号1或5时,它并不像以前那样简单。 So if I have some tool like algebra ring it's easy. 因此,如果我有一些像代数环这样的工具,那很容易。 Can I simulate it? 我可以模拟吗?

Oh, I'm using MySQL. 哦,我在用MySQL。

Like this: SQLFIDDLE 像这样: SQLFIDDLE

set @curr_user = 1;
set @maxid = (select max(u1.id) maxid from users u1);
set @minid = (select min(u2.id) minid from users u2);
set @next_user = (if(@curr_user = @maxid
                           ,@minid
                           ,@curr_user +1));
set @prev_user = (if(@curr_user = @minid
                           ,@maxid
                           ,@curr_user - 1));

SELECT t1.name as prevuser, t2.name as curruser, t3.name as nextuser
FROM users t1
join users t2
on 1=1
JOIN users t3
on 1=1
WHERE t1.id = @prev_user
AND t2.id = @curr_user
and t3.id = @next_user

EDIT: I made a slight adjustment so it would work even if there are missing id's, let's say you have user 1,3,4,5,7 this would get user 4,5,7 if current is 5 SQLFIDDLE 编辑:我做了一点调整,所以即使缺少ID,它也可以工作,假设您有用户1,3,4,5,7,如果当前为5, 则将获得用户4,5,7 SQLFIDDLE

set @curr_user = 3;
set @maxid = (select max(u1.id) maxid from users u1);
set @minid = (select min(u2.id) minid from users u2);
set @nextid = (select min(id) from users where id > @curr_user );
set @previd = (select max(id) from users where id < @curr_user );
set @next_user = (if(@curr_user = @maxid
                           ,@minid
                           ,@nextid));
set @prev_user = (if(@curr_user = @minid
                           ,@maxid
                           ,@previd));

SELECT t1.name as prevuser, t2.name as curruser, t3.name as nextuser
FROM users t1
join users t2
on 1=1
JOIN users t3
on 1=1
WHERE t1.id = @prev_user
AND t2.id = @curr_user
and t3.id = @next_user

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM