STEEM SQL 系列之 历史上的今天怎么实现的?


mssql STEEM SQL 系列之 历史上的今天怎么实现的? I.T. SteemIt 数据库

MSSQL Database

@dapeng 之前搞了一个 “历史上的今天” 挖坟贴 , 也就是通过 SQL 查询 在以前在同一天发表的帖子, 听起来很玄乎? 实际上就是以下SQL. 我们先来看看:

1
2
3
4
5
6
7
8
9
select top 10 *
from 
    Comments
where
    FORMAT(created,'MM-dd','en-us') = FORMAT(GetDate(),'MM-dd','en-us') and 
    FORMAT(created,'yyyy','en-us') <> FORMAT(GetDate(),'yyyy','en-us') and
    title <> ''
order by 
    total_payout_value desc
select top 10 *
from 
    Comments
where
    FORMAT(created,'MM-dd','en-us') = FORMAT(GetDate(),'MM-dd','en-us') and 
    FORMAT(created,'yyyy','en-us') <> FORMAT(GetDate(),'yyyy','en-us') and
    title <> ''
order by 
    total_payout_value desc

我们来解释一下:

  • select top 10 * 选择前10条记录
  • from Comments 查询 STEEMSQL 里的 Comments 表
  • FORMAT(created,’MM-dd’,’en-us’) = FORMAT(GetDate(),’MM-dd’,’en-us’) 发表时间的月和日要和今天一样
  • FORMAT(created,’yyyy’,’en-us’) <> FORMAT(GetDate(),’yyyy’,’en-us’) 但是又不能是今年.
  • title <> ” 标题为空, 也就是限制文章类型(评论的标题一般是空)
  • order by total_payout_value desc 按照收益排序

我们还可以其它条件, 比如 categories = ‘cn’ 只查询第一个标签为 cn 的帖子.

@arcange 提出了更好的SQL版本:

1
2
3
4
5
6
7
8
9
10
SELECT TOP 10 
    *
FROM
    Comments (NOLOCK)
WHERE
    FORMAT(created,'MM-dd','en-us') = FORMAT(GetDate(),'MM-dd','en-us')
    AND YEAR(created) <> YEAR(GETUTCDATE()) and
    AND depth = 0
ORDER BY
    total_payout_value DESC
SELECT TOP 10 
    *
FROM
    Comments (NOLOCK)
WHERE
    FORMAT(created,'MM-dd','en-us') = FORMAT(GetDate(),'MM-dd','en-us')
    AND YEAR(created) <> YEAR(GETUTCDATE()) and
    AND depth = 0
ORDER BY
    total_payout_value DESC
  • 一定不要忘记在每个表后面加上 (NOLOCK)
  • total_payout_value 没有索引, 所以有可能很慢(排序)
  • 使用 GETUTCDATE() 而不是 GETDATE() 因为在数据库中所有时间都是 UTC
  • 避免返回所有字段, 因为 Comments 表有很多数据
  • (nolock) 很重要因为有可能 SteemSQL 会注入更新的时候会发生死锁. 加上这个关键字能大大的提高效率(避免杀死运行很慢的查询)

英文: SteemSQL Tutorial: How to Get Historic Posts of Today on SteemIt?

STEEM SQL 系列教程

GD Star Rating
loading...
本文一共 491 个汉字, 你数一下对不对.
STEEM SQL 系列之 历史上的今天怎么实现的?. (AMP 移动加速版本)
上一篇: 论PHP是世界上最好的语言 PHP is the best programming language in the world!
下一篇: 逻辑测试系列之三 - SUBT

扫描二维码,分享本文到微信朋友圈
c8bfe0d6b7651899567d53db7b235970 STEEM SQL 系列之 历史上的今天怎么实现的? I.T. SteemIt 数据库

评论