sqlserver newid() 随机取多条数据 根据条件排序

博客讨论了在SQLServer中如何为用户随机展示券码数据。当用户首次访问时,需要随机抽取数据;后续访问则按特定条件查询。遇到的问题是,随机抽取后的数据顺序在用户再次访问时无法保持一致。解决方案是通过结合newid()和id进行排序。此外,还提到了XML对象在没有数据时的处理方式,即检查对象的子元素数量来判断是否为空。
摘要由CSDN通过智能技术生成

需求是,用户第一次进来去领取券码页面,随机给用户三条数据,然后显示。之后第二次进来,直接根据用户的openid查是否有数据,若有直接到显示页面查看,么有的话去领取。

测试的时候发现,第一次领取之后显示的页面数据顺序和之后N次登陆进来看到的数据顺序不一样。

后来仔细想想,也对,第一次显示的数据是随机抽取的。(券码数据是之前导入进来的,创建时间是入库券码数据的时候,给用户数据的时候只是把用户某些标示信息更新到数据里)

第二次显示就是普通的条件查询 然后显示。

然后想说 更新用户信息的时候 修改入库时间 ~ 可是也行不通。因为每个用户给多条数据,修改的多条入库时间都是一样的。 然后pass~!


这是我之前的取数据语句

select  top 5 *  from table where open_id=' ' order by newid()

然后改成这样 想说能不能再根据id排序一下 结果不管用~ 因为order by已经有newid()了

select  top 5 *  from table where open_id=' ' order by newid(),id


然后 把语句改成了子查询~

select * from (

           select top 3 * from table where open_id='  ' order by newid()

) as temp order by temp.id

完美解决~


还有一个问题~

如果对象封装成为xml文件的话,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值