比如你看到这样的 帖子 “随机挑选几个帖子” 或者 “随机挑选几个回复”, 你是不是在想, 这怎么弄的? 其实不难, 我们先来看第一个版本:
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 是否数据同步完全?
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK