比如你看到这样的 帖子 “随机挑选几个帖子” 或者 “随机挑选几个回复”, 你是不是在想, 这怎么弄的? 其实不难, 我们先来看第一个版本:
1 2 3 4 5 6 7 8 9 10 | SELECT TOP 10 author, body FROM Comments (NOLOCK) WHERE FORMAT(created,'MM-dd','en-us') = FORMAT(GETUTCDATE(),'MM-dd','en-us') AND YEAR(created) <> YEAR(GETUTCDATE()) AND depth = 0 ORDER BY NEWID() |
SELECT TOP 10 author, body FROM Comments (NOLOCK) WHERE FORMAT(created,'MM-dd','en-us') = FORMAT(GETUTCDATE(),'MM-dd','en-us') AND YEAR(created) <> YEAR(GETUTCDATE()) AND depth = 0 ORDER BY NEWID()
说明:
- 尽可能只选择你需要的字段而不是返回所有 select *
- 在表后面加上(NOLOCK) 能避免数据库正在更新的时候锁定查询.
- 使用GetUTCDate() 日期时间函数因为在STEEMSQL上所有时间都是UTC.
- 使用 depth = 0来限制文章, 相反使用depth > 0来查询所有的评论
- ORDER BY NEWID() 能根据随机ID来排序, 所以很慢, 因为需要查找所有的记录然后再排序.
我们还可以限制类别, 比如 “cn” 类目随机挑选……
1 | category = "cn" |
category = "cn"
效率较高的方法是在在WHERE限制语句中加上以下判断:
1 | AND (ABS(CAST( (BINARY_CHECKSUM(ID, NEWID())) as int)) % 100) < 50 |
AND (ABS(CAST( (BINARY_CHECKSUM(ID, NEWID())) as int)) % 100) < 50
BINARY_CHECKSUM 函数用于返回一些字段的较验值, 速度快, 并且不需要查找所有记录也不需要排序就可以了.
当然, 还可以在 PYTHON或PHP中先生成一个随机ID的列表, 然后把这些列表值传入SQL语句中……
你还有什么好的办法? 分享出来, 如果是个很好的(创新)办法, 那么我们奖励你 1 SBD.
英文: SteemSQL Tutorial: How to Get Random Posts on SteemIt?
STEEM SQL 系列教程
- STEEM SQL 系列教程之 随机返回是怎么实现的?
- STEEM SQL 系列教程之 如何获取最近7天 CN 区用户发贴量, 点赞数和估计收益值?
- STEEM SQL 系列教程之 历史上的今天怎么实现的?
- STEEM SQL 系列教程之 每个月能挣多少?
- STEEM SQL 系列教程之 真的可以恢复删除的文章或评论么?
- STEEM SQL 系列教程之 大鱼们都给谁投票了?
- STEEM SQL 系列教程之 办银行一个月共发了多少利息?
- STEEM SQL 系列教程之 你的哪些好友已经好久没玩STEEM了?
- STEEM SQL 系列教程之 如何使用 ISJSON 和 JSON_VALUE 函数?
- STEEM SQL 系列教程之 如何获取史上赚最多金的作者?
- STEEM SQL 系列教程之 一鸣惊人的作者
- STEEM SQL 系列教程之 如何避免 SQL 注入?
- STEEM SQL 系列教程之 我花了800多 SBD (7000多美元)买赞
- STEEM SQL 系列教程之 怎么样查看 STEEMSQL 是否数据同步完全?
GD Star Rating
loading...
本文一共 531 个汉字, 你数一下对不对.loading...
上一篇: 剑桥华人迎中秋做月饼活动
下一篇: 说说单点故障 Single Point Failure
扫描二维码,分享本文到微信朋友圈
沙发舍我其谁!
记得看到过你的光标每次输入都会有些颜色的圈圈像爆裂一样分散, 网上找了没找到, 请问是怎么弄的?
vs 插件 power mode