分享

Q:SQL该怎么用? · 语雀

 圣龙领主 2021-11-15
作为一个非程序员,我对 SQL 很崇拜,因为并不会写 🤣……所以就把看到的一些 SQL 语句放在这里,以飨读者。

同时,也欢迎路过的大佬有空的话可以丰富一下可能的场景和 SQL 使用方法 🙏。

可以直接输入 /嵌入块、embed ,也可以打两个花括号 {{ }},然后在窗口中输入特定格式的语法就可以实现了。需要参考思源笔记用户指南的「数据库表」和「类型过滤」 。

先用两个小例子来说明 SQL 的使用场景。

SQL ?

随机漫游🎲

SQL复制代码
xxxxxxxxxx
SELECT * FROM blocks WHERE root_id LIKE '♂' AND type = 'h' ORDER BY random() LIMIT 1

♂ 替换为文档的 id,通过复制块应用再右键就可以看到。

关键词🏆

SQL复制代码
xxxxxxxxxx
select * from blocks markdown like '%唯物主义%' and type ='p' ORDER BY updated desc

就可以汇总工作空间中提到了「唯物主义」所有段落块。

当然,为了显示其重要程度,也可以直接 生成一个子文档,然后也可以使用 模板。

汇总所有待办事项🧾
Plain Text复制代码
xxxxxxxxxx
SELECT * FROM blocks WHERE (id in (select parent_id from blocks where type !='l' ) and type='i' and subtype = 't' and markdown like '%[ ]%') order by random() limit 15
Plain Text复制代码
xxxxxxxxxx
SELECT * FROM blocks WHERE (id in (select parent_id from blocks where type !='l' ) and type='i' and subtype = 't' and markdown like '%[x]%') order by random() limit 15
查询八月份的一些块👀

八月份最后创建的块
Plain Text复制代码
xxxxxxxxxx
select * from blocks where updated like '%202108%' order by created desc
八月份到十月份随机挑十个块出来
Plain Text复制代码
xxxxxxxxxx
select * from blocks where updated > '20210801' and updated < '20211031' order by random() limit 10

Plain Text复制代码
xxxxxxxxxx
select * from blocks where (created like '%202108%' or created like '%202109%' or created like '%202110%') order by random() limit 10

第二个例子就是and和or的区别了,懂的都懂,还是推荐用>和<的这个。另外,是不是or的问题,所以不用括号圈起来的话会导致别的数据也查询了,所以需要用括号把之后的三个的语句结合为一个整体,比如这样:

Plain Text复制代码
xxxxxxxxxx
select * from blocks where markdown like '%海%' and type = 'p' and (created like '%202108%' or created like '%202109%' or created like '%202110%') order by random() limit 10

当然,这样就是给自己找事做了,所以还是推荐用 这三个 😂


SQL !

通过上面三个案例,我们已经初步体验到了 SQL 的强大。为了更好地使用这个工具,还是很有必要学习一下其原理的。下面是一个群友的理解,因为视频解说需要有所删改。

在我看来,SQL 就是在你的文件数据库中满足你提的所有要求,来搜索过滤出你想要的信息,并呈现出来。

所以,SQL 语句的本质就是各种条件的组合

而思源的语句,我把它拆分为开头语,中间条件和结尾语。

结尾语可有可无,但开头语和中间条件必须有。

开头语

在 SQL 语句的开头位置,且必不可少。

开头语就是:

SELECT * FROM blocks WHERE  翻译:我要搜索各种类型的块

中间条件

在 SQL 语句中至少要有 1 个,数目不限。

它们可以自由组合,且不分先后顺序,它们之间用 AND 或 OR 来连接。

AND 翻译:和。几个条件同时满足。

OR 翻译:或者。满足其中一个。

中间条件有且不仅有以下这些:

content LIKE '%张三%'  翻译:该块有【张三】这几个字
content LIKE '%#张三#%' 翻译:该块标签是【张三】
name='张三'  翻译:该块的命名是【张三】(也就是它的命名有且仅有张三这几个字)
created >'20210623'  翻译:该块是【20210623】后创建的

在说明书的 「block 表」中有详细的说明,contentmarkdown 的区别在于后者是包含了标记符号的,比如说,可以查询 PDF 的锚文本。

关于 type 的类型,也就是内容块的类型,同样可以参考说明书:「类型字段 type」

结尾语

在 SQL 语句中可以没有,有的话最多只能有 1 个。

结尾条件以 order by 开始,接下面几个:

1created 是块创建时间,默认升序,也可以跟一个 DESC 改成降序,DESC 也就是 descent 的意思;
2updated 是块更新时间,点击左侧的块标其实就能看到。和 created 用法一样;
3random() 是随机挑出块来,适用于随机漫游的场景;
4LIMIT 5 是限制条件,只筛选出前五个;

SQL ?

如果我想找到所有标记的查询方式

在上一部分的 markdown 那里我们说过它是包含了一些标记符号的,那么就可以使用它来做到对加粗、划线等标记的汇总。

markdown 语法了解一下

首先,我们需要了解一下 markdown 语法。网上有很多,我参考的是曾经很喜欢的一个云笔记做的教程:Markdown 与快捷输入

这部分的语法以 and markdown like 开始,该接什么呢?我们不妨把思源里所有的标记都尝试一遍,然后复制到一个不支持 md 语法的地方,比如 QQ,就会找到规律了。下面的 % 都是任意字符的意思,其实很容易就能看出根本没必要写这么全,不过为了对思源里的语法有更深入的理解,不妨找一下完全体的规律:

「引用块」
Plain Text复制代码
xxxxxxxxxx
'%((% "%"))%'
链接
Plain Text复制代码
xxxxxxxxxx
'%[%](%)%'
粗体
Plain Text复制代码
xxxxxxxxxx
'%**%**%'
斜体
Plain Text复制代码
xxxxxxxxxx
'%*%*%'
下划线
Plain Text复制代码
xxxxxxxxxx
'%<u>%</u>%'
删除线
Plain Text复制代码
xxxxxxxxxx
'%~~%~~%'
标记
Plain Text复制代码
xxxxxxxxxx
'%==%==%'
上标 1
Plain Text复制代码
xxxxxxxxxx
'%^%^%'
下标 2
Plain Text复制代码
xxxxxxxxxx
'%~%~%'
键盘
Plain Text复制代码
xxxxxxxxxx
'%<kbd>%</kbd>%'
#标签#
Plain Text复制代码
xxxxxxxxxx
%#%#%
行内代码
Plain Text复制代码
xxxxxxxxxx
%`%`%
行内数学公式

Plain Text复制代码
xxxxxxxxxx
%$%$%
字体:
字体颜色
背景颜色
字体效果
发光
镂空
彩色
投影
有重合的两个语法怎么解决

注意到,粗体和斜体、删除线和下标的语法是有重合的,所以,需要一点小小的处理:

可以对比一下:

Plain Text复制代码
xxxxxxxxxx
markdown like '%*%*%'

Plain Text复制代码
xxxxxxxxxx
markdown like '%*%*%'
and markdown not like '%**%**%'

字体的话,就复杂了一些

解决了斜体和下标的问题,还有 字体的问题,其 md 标记符号也是和粗体一样的两个星号,该怎么办呢?

我们打开一下这个文件看看吧,总有办法的。

可以找到如下的几行代码:

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"color: var(--b3-font-color13);\"}"

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"background-color: var(--b3-font-background5);\"}"

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"text-shadow: 0px 0px 0.1em, 0px 0px 0.3em;\"}"

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"-webkit-text-stroke: 0.2px var(--b3-theme-on-background); -webkit-text-fill-color: transparent;\"}"

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"background-image: linear-gradient(to right, var(--b3-theme-primary), var(--b3-theme-error)); -webkit-background-clip: text; color: transparent;\"}"

Plain Text复制代码
xxxxxxxxxx
"Data": "{: style=\"text-shadow: 1px 1px var(--b3-border-color), 2px 2px var(--b3-border-color), 3px 3px var(--b3-border-color), 4px 4px var(--b3-border-color);\"}"

都成功了,完整版自然是把 后的所有代码都输入进去,但是对于一些较简单的、比如和,就没必要了,起码我是看不懂其他的。。

我后来给自己做了一个读书笔记的模板

因为我看了「《学习之道》」这本书后对自己喜欢做标注这个喜欢进行了深刻的反思,所以只保留了三个:

1随机漫游
2高亮,在 Tsundoku 系列主题下高亮可以达成简单挖空的效果
3字体颜色,而且因为我对不同的颜色没啥区分,把代表颜色序号的数字替换成了 %,就可以汇总所有的颜色了

其中很关键的一个语法是这一个:

Plain Text复制代码
xxxxxxxxxx
and path like '%.action{.id}%'
and root_id != '.action{.id}'

这保证了把搜索结果限定在了这个排除了这个文档的所有子文档之内。比如说我正在看的这本书,「《新编马克思主义哲学发展史》」,我因为个人习惯创建了很多子文档,一些笔记也会直接在这里写。

这实际上是对思源的模板无法创建文档而做出的权宜之策。因为文档 ID 是随机生成的嘛,所以无法事先设计好。本来我是全手动复制块引用,再复制 ID 的。直到思源更新了子文档之后,我发现这样做完全可以。

说到挖空,我就想起了 Tsundoku 系列主题的一些自定义属性

我们依旧打开它看一看。

是通过属性-自定义属性实现的,添加属性名为 function,属性值有如下几个可选。等待我切换主题看一下效果。

1挖空
2
3
4
5ing
610
720
830
940
1050
1160
1270
1380
1490
15done
16important
17kaiti (楷体)
18quote

那么,该怎么汇总这些块呢?这个是群里的大佬告诉我的,我还不知道为啥。

SQL复制代码
xxxxxxxxxx
select * from blocks where id in (select block_id from attributes where name = 'custom-function' and value = '挖空')

就只演示一下用 SQL 汇总“湿法挖空”了。

成功了,其他的通过替换属性值就可以了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约