尝试通过查询语句来动态构建数据库

上次尝试了一下实现一个 SuperRef 之后 ld246.com/article/1739206311467 很快意识到了一个问题,所谓 SuperRef 的核心算子是就两个:

  1. 反链查询(包括重定向操作)
  2. 根据搜索的内容更新数据库的行

反链查询的目的只是为了得到要加入数据库的块,所以可以不局限于反链,而是通过各种查询动态地构建数据库。

不过反链查询毕竟有特殊的含义,所以为了和 SuperRef 区别,把这个功能称为 Dynamic Database。他和 SuperRef 的本质其实是一样,小区别在于:SuperRef 是把数据库绑定一个文档,而 Dynamic Database 则只针对数据库本身。

现在使用 fmisc 5.6.0 版本之后,点击数据库旁边的按钮可以把它设置为一个「动态数据库」。

图片.png

在里面放一些查询语句,这里的案例是收集所有有 TODO 和 DOING tag 的条目。

图片.png

点击一下「更新数据库」按钮,就自动创建条目了。

由于我查询的是标签,所以在数据库中增加一个模板列,把块中的标签信息提取出来。

.action{ $blocks := queryBlocks "select * from blocks where id='?'" .id} .action{ if not (empty $blocks) } .action{ $tag := (first $blocks).Tag | replace "#" "" } <span data-type="tag">.action{ $tag }</span> .action{ end }

大致效果是这样的:

图片.png

可以用以下的 SQL 查询所有绑定了动态构建规则的数据库(汇总在书签侧边栏中)

select * from blocks where type='av' and ial like '%custom-dynamic-database%' order by updated desc;

不过说实话,我自己尝试几天后,发现这个功能的定位有点尴尬。

原因在于到目前为止,如何聚合内容块,我自己已经有了三种方案:

  • 基于 QueryView,优点是非常灵活
  • 基于书签 +,优点是可以不用打开文档而在软件最顶层显示
  • 基于(SuperRef)数据库,优点是可以添加自定义的列以补充元信息

图片.png

使用数据库的核心优势就是可以补充列,那对我来说问题就来了:

  • 如果添加元信息很重要,那完全可以用 SuperRef 绑定到一个主题文档
  • 如果添加元信息不重要,那完全可以用更灵活的 QueryView ,或者聚合到侧边书签当中

所以这种动态构建数据库的方案上不去下不来,感觉有点鸡肋。到底实际价值有多大,就交给其他人来自行评判了。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25278 引用 • 104294 回帖
  • QueryView
    6 引用 • 40 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • veryzhh 3 评论

    感谢 F 佬,又提供了一个强大的功能!我用了新的动态数据库,有两点体会。

    两点体会:

    • 标签式动态数据库很有用,更有利于对标签对象进行管理。
      • 虽然书签 + 里调取会更直接,但后续管理的衔接不是太方便,用数据库就可以设置不同的筛选视图,并给标签对象的情况加状态或说明。
      • 对于普通的标签,可以不需要这一步;但对于有后续管理动作的标签,动态数据库就很有用了。
    • 关键词动态数据库,使一些特定的日常札记的收录,更加便捷。
      • 比如,我偶尔会在日记中记录自己做的梦,以前需要右键送到相应数据库(当然也可以用 SuperRef 方式),但这都要多一个动作。现在只要描述中有“做了个梦”,这一段落块就自动添加到记录梦的数据库了。对于日常札记这种很普通的事来说,完全不需要有多余的动作,只要记录的内容中有特定的表述就行了。
      • 这一方式不足是,关键词不能过于通用(简单),否则如果别的文章里刚好大量使用了该词,那就是“灾难”了。

    一点疑问:

    • 我抄了 F 佬你在图片中提供的 JS 代码,来收集指定标签对象信息,但不知为什么跑不通。使用以下代码后,会提示 blocks.sorton is not a function,把 blocks = blocks.sorton('updated');//,去掉下一行的 //,又会提示 查询没有返回结果
    //!js let blocks = await Query.sql(` select * from blocks where (type='p' or type='d' or type='h') and (tag like '#待梳理#' or tag like '#待完善#')/ `); blocks = blocks.sorton('updated'); //blocks = await Query.fb2p(blocks); return blocks.pick('id');
    • 后来用书签 + 试过其中的 SQL 代码是可用的,我就套用了您在设置面板上提供的 JS 代码,这次可以调取查询数据到数据库了。我上面所模仿的 JS 代码中到底有什么问题呢?还是这个代码需要什么插件或功能来支持?还望 F 佬不吝赐教 🙏 。
    //!js const blocks = await sql("SELECT * FROM blocks WHERE (type='p' OR type='d' OR type='h') AND (tag LIKE '%#待梳理#%' OR tag LIKE '%#待完善#%')"); return blocks.map(b => b.id);
    没有什么问题, blocks.sorton 和 fb2p 都不是必须的;另外没有 sorton 可能是 QV 的版本不太对,我印象中这几个版本我更改过这部分的代码。不过 sorton 不影响最后的结果,删掉也无所谓。
    Frostime
    哦,我注意到了,你用的是 sql 而不是 Query.sql 是吧?那确实不会有 sorton。 sorton 和 pick 都是 QueryView 里面对列表封装了一层后增加的方法,普通列表里面是没有这些方法的。
    Frostime
    @Frostime 我装了 Query & View,但还不会用,所以只是装了插件本身,没做任何配置。看来应该是这个原因了。
    veryzhh
  • onemo

    要是能自动更新动态数据库就更好了 😋

推荐标签 标签

  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 593 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    163 引用 • 312 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 4 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖 • 1 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 611 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖
  • Excel
    31 引用 • 28 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 2 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 56 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 7 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 2 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 1 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 387 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    184 引用 • 1015 回帖 • 1 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 17 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25278 引用 • 104294 回帖
  • 印象笔记
    3 引用 • 16 回帖 • 3 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖 • 1 关注