小赖子的英国生活和资讯

STEEM SQL 系列之 随机返回是怎么实现的?

阅读 桌面完整版
mssql STEEM SQL 系列之 随机返回是怎么实现的? I.T. SteemIt 数据库

MSSQL Database

比如你看到这样的 帖子 “随机挑选几个帖子” 或者 “随机挑选几个回复”, 你是不是在想, 这怎么弄的? 其实不难, 我们先来看第一个版本:

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()

说明:

我们还可以限制类别, 比如 “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 系列教程

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version