mysql - 在SQL中模拟环(代数)

标签 mysql sql algebra

我正在创建小型配置文件查看器,我想在 SQL 中模拟环。怎么运行的?对于简单: 我的 table 上有 5 个用户。当我从中间获得一个到我的实验(如用户编号 2、3、4)时,下一个和上一个用户是 CURRENT_USER_ID +- 1。但是当我选择用户编号 1 或 5 时,它并不像以前那样简单。所以如果我有代数环之类的工具就很容易了。我可以模拟吗?

哦,我正在使用 MySQL。

最佳答案

像这样: 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

编辑:我做了一个轻微的调整,所以即使缺少 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

关于mysql - 在SQL中模拟环(代数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574647/

相关文章:

mysql - 在 MariaDB 中,放置在触发器中的函数开始返回不同的值

sql - JOIN PostgreSQL 中的两个表和 GROUP BY

sql - 在 Presto 中按数组值分组

c - 金字塔废话 : How can I algebraically exclude i=0 instead of with an if conditional statement?

java - 在java中判断num是否是2的幂?

mysql - Sqoop 从 MySQL 导入 : Decimals always imported into Hive as String

php - 试图让 php 查询每天只发生一次

mysql - Sql删除多个表的多条数据

prolog - 我很好奇逻辑程序是否可以做代数

mysql - 按日期查找不同表组中的最大值