SELECT * FROM `your_table` LIMIT 0, 10
- >这将显示第一个1,2,3,4,5,6,7,8,9,10
SELECT * FROM `your_table` LIMIT 5, 5
- >这将显示记录6,7,8,9,10
我想显示数据2,3,4,5,6,7,8,9,10,1和 第二天3,4,5,6,7,8,9,10,1,2 第二天后4,5,6,7,8,9,10,1,2,3
在更新此表的任何数据时是否可能???
答案 0 :(得分:1)
您可以使用UNION语法执行此操作:
SELECT * FROM `your_table` LIMIT 5, 5 UNION SELECT * FROM `your_table`
这将首先选择限制范围内的行,然后合并第二个选择的剩余部分。请注意,您无需在第二个select语句上设置限制:
UNION的默认行为是从结果中删除重复的行。可选的DISTINCT关键字除了默认值之外没有任何影响,因为它还指定了重复行删除。使用可选的ALL关键字,不会发生重复行删除,结果包括所有SELECT语句中的所有匹配行。
答案 1 :(得分:0)
我不认为这可以通过简单的选择(我可能是错的)来实现。我想你需要一个存储过程。
答案 2 :(得分:0)
您已将此标记为Oracle,但您的SQL语法对Oracle无效,因为它不支持LIMIT
但是,这是一个适用于Oracle的解决方案:
select *
from ( select rownum as rn,
user_id
from admin_user
order by user_id
) X
where X.rn > :startRows
and X.rn <= :startRows + :limitRows
order by case when X.rn <= :baseRef
then X.rn + :limitRows
else
X.rn
end ASC
;
其中:startRows和:limitRows是LIMIT的值,并且:baseRef是介于0和:limitRows-1之间的值,应该每天递增/循环(即在第1天它应该为0; on第2天,第1天;第10天,第9天;第11天,您应该恢复为0)。您实际上可以使用当前日期,转换为Julian并在除以以下时取余数:limitRows以自动计算:baseRef
(根据需要替换您自己的列和表名称)
答案 3 :(得分:0)
嗯,这个问题的作者可能有点迟,但对人们有用。
简短回答:可以进行&#34;旋转&#34;就像作者问的那样。
答案很长:[我将首先解释MySQL - 我在哪里测试过这个]
让我们想象我们有表 your_table (INT rn,...)。你想要的是以特定的方式排序(&#34;旋转&#34;从rn = N开始)。排序的第一个条件是rn> = N desc。这个想法(至少我如何理解这一点)是我们将订单从 asc 更改为 desc 并将我们的表分成两部分(&lt; N和&gt; = N) 。然后我们按照rn但 asc 顺序重新订购。它将独立地为每个组执行排序。所以这是我们的查询:
select * from your_table where rn between 1 and 10
order by rn >= N desc, rn asc;
如果你没有列 - 你总是可以使用参数
的技巧select t.*, @rownum := @rownum + 1 AS rn
from your_table t,
(SELECT @rownum := 0) r
where @rownum < 10 /* here be careful - we already increased by 1 the rownum */
order by @rownum >=N - 1 desc, /* another tricky place (cause we already increased rownum) */
@rownum asc;
但是,我不知道最后一个是否有效。
对于Oracle,您始终可以使用rownum。而且我相信你会得到相同的结果(我没有测试过它!)。
希望它有所帮助!