出于广告目的,移动/旋转sql server查询的输出
我正在尝试创建一个查询,它将改变我网站上每个用户每次执行的结果。目标是使用SQLServer2008数据库技术实现这一目标 例如,如果我有一个包含三行数据的表: 我试图找到一种方法,通过名称升序,然后移动/旋转结果来选择此数据顺序出于广告目的,移动/旋转sql server查询的输出,sql,sql-server-2008,rotation,shift,Sql,Sql Server 2008,Rotation,Shift,我正在尝试创建一个查询,它将改变我网站上每个用户每次执行的结果。目标是使用SQLServer2008数据库技术实现这一目标 例如,如果我有一个包含三行数据的表: 我试图找到一种方法,通过名称升序,然后移动/旋转结果来选择此数据顺序 ID Name 1 Apple 2 Orange 3 Banana 用户1加载一个页面并看到 Apple Banana Orange 用户1重新加载同一页面,然后看到 Banana Orange Apple Orange Apple Bana
ID Name
1 Apple
2 Orange
3 Banana
用户1加载一个页面并看到
Apple
Banana
Orange
用户1重新加载同一页面,然后看到
Banana
Orange
Apple
Orange
Apple
Banana
用户1重新加载同一页面,然后看到
Banana
Orange
Apple
Orange
Apple
Banana
用户2等具有完全相同的体验,以相同的顺序旋转/移动结果
我可以创建和存储任何必要的值,例如名字、姓氏或ID
是否有一个简单而优雅的解决方案(查询、存储过程、函数等)可以在SQL Server级别完成此任务
原因是,相对于字母顺序A到Z,所有颜色都有机会显示在列表顶部。如果SQL Server具有序列和类似PostgreSQL或Oracle的
nextval()
函数,那么就可以这么简单-假设您的基本排序基于id,从1开始,没有漏洞:
SELECT id, name
FROM mytbl
ORDER BY CASE WHEN id > @nextval%number_of_rows THEN 0 ELSE 1 END, rn
请参见此处了解解决方法:
使用问题的新输入进行编辑
那么它可能是这样的:
DECLARE @nextval int;
WITH x AS
(
SELECT id
,name
,ROW_NUMBER() OVER(ORDER BY name) AS rn
,COUNT(*) OVER() AS ct
FROM mytbl
)
SELECT id
,name
FROM x
ORDER BY CASE WHEN rn > @nextval%ct THEN 0 ELSE 1 END, rn
- 按字母顺序排序
- 行数是动态的
- 语法现在正在测试中
- 您只需要一种方法来增加@nextval。以上链接可能会有所帮助
上写了一个演示 你可以去那里看看
如果SQL Server具有类似于“限制”和“偏移量”的功能,这将更简单。不能做这项工作。请参阅:如果SQL Server有序列和一个类似PostgreSQL或Oracle的
nextval()函数,那么就可以这么简单-假设您的基本排序基于id,从1开始,没有漏洞:
SELECT id, name
FROM mytbl
ORDER BY CASE WHEN id > @nextval%number_of_rows THEN 0 ELSE 1 END, rn
请参见此处了解解决方法:
使用问题的新输入进行编辑
那么它可能是这样的:
DECLARE @nextval int;
WITH x AS
(
SELECT id
,name
,ROW_NUMBER() OVER(ORDER BY name) AS rn
,COUNT(*) OVER() AS ct
FROM mytbl
)
SELECT id
,name
FROM x
ORDER BY CASE WHEN rn > @nextval%ct THEN 0 ELSE 1 END, rn
- 按字母顺序排序
- 行数是动态的
- 语法现在正在测试中
- 您只需要一种方法来增加@nextval。以上链接可能会有所帮助
为了弄清楚我的语法,我在
上写了一个演示
你可以去那里看看
如果SQL Server具有类似于“限制”和“偏移量”的功能,这将更简单。不能做这项工作。请参阅:我不知道SQL server查询的shift或rotate输出,但我正尝试使用与您相同的方法,我使用NEWID()对输出进行随机排序
select name,company,etc from tblCompany order by NEWID() desc
我不知道SQL server查询的shift或rotate输出,但我正在尝试和您一样做,我使用NEWID()对输出进行随机排序
select name,company,etc from tblCompany order by NEWID() desc
行数是常数吗?基本顺序是字母顺序、随机顺序还是id顺序?不,数据是根据类别变化的,至少有一个,可能上限是20行,但通常会少很多,可能是三到五行。行数是恒定的吗?基本的排序是字母顺序、随机顺序还是id顺序?不,数据是根据类别变化的,至少有一个,可能上限是20行,但通常会少很多,可能是三到五个结果。谢谢你的想法。最后,我的例子被简化了。理想情况下,我会按字母顺序对名称进行排序,并进行旋转/移位。我将更新原始问题以表明这一点。对于我来说,我实际上可以为每个用户存储并增加一个数字,以保持他们的位置,在第一次执行时,我将其初始化为0。非常感谢你!谢谢你的主意。最后,我的例子被简化了。理想情况下,我会按字母顺序对名称进行排序,并进行旋转/移位。我将更新原始问题以表明这一点。对于我来说,我实际上可以为每个用户存储并增加一个数字,以保持他们的位置,在第一次执行时,我将其初始化为0。非常感谢你!这个想法很有趣,但当时我需要专门轮换广告,实际上我需要在每个用户的基础上这样做,以确保平等的显示时间。谢谢你在我的第50个星期四再次提出这个问题!干杯这个想法很有趣,但当时我需要专门轮换广告,实际上我需要在每个用户的基础上这样做,以确保平等的显示时间。谢谢你在我的第50个星期四再次提出这个问题!干杯