如何使用 query 筛选特定文档

最近创建了一个电影库,如图所示

截屏 2024112213.12.17.png

我想建立一个数据库分类已看和未看,目前的语句是

select * from blocks where markdown like '%已看%' and type ='t' ORDER BY updated desc

但是返回的是

截屏 2024112213.15.58.png

请问我如何才能只显示符合条件的文档标题而不是显示这么一大串呢?

  • 思源笔记

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

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

    25471 引用 • 105348 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9746 引用 • 44340 回帖 • 86 关注

相关帖子

被采纳的回答
  • wilsons 1

    确实这里 SQL 写法不对,因为你查找的是文档中的子块内容,所以要先查询子块,然后按 root_id 去重后再查文档数据。

    大概是如下的 SQL,仅仅是伪代码举例说明,没有测试,仅供学习参考

    select '[' || content || '](siyuan://blocks/' || id || ')' AS __1____pre__文档标题 from blocks where type ='d' and id in ( select distinct root_id from blocks where markdown like '%已看%' and type ='t' ) ORDER BY updated desc

    注意,如果用下面的 SQL 脚本,select '[' || content || '](siyuan://blocks/' || id || ')' AS __1____pre__文档标题 换成 select *

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 方法一,SQL 查询挂件

    select '[' || content || '](siyuan://blocks/' || id || ')' AS __1____pre__文档标题 from blocks where markdown like '%已看%' and type ='d' ORDER BY updated desc

    方法二,SQL 查询脚本(在文档中输入{{}},把下面代码粘贴到输入框即可)

    //!js return (async () => { // sql查询语句 const sql = `select * from blocks where markdown like '%已看%' and type ='d' ORDER BY updated desc`; // 查询数据库 const result = await query(sql); // 渲染结果 return renderFields('content'); /////// 功能函数区 /////// // 渲染字段 // 调用示例 // renderFields('content, created'); 或 renderFields(['content', 'created']) // 或 renderFields('content, created', (value, field, result) => {return field === 'created' ? value.substring(0, 10) : value;}); function renderFields(fields, callback, style) { let html = ''; callback = callback || ((value, field) => {return value;}); if(typeof result === 'string') return error(result); result.forEach(item => { if(typeof fields === 'string') { fields = fields.split(',').map(field => field.trim()); } let fieldsHtml = ''; fields.forEach((field, i) => { if(field === '') return; if(fieldsHtml === '') { fieldsHtml += `<span data-type="block-ref" data-id="${item.id}" data-subtype="d" style="${style}">${callback(item[field], field, result)}</span>`; } else { fieldsHtml += `<span style="margin-left:20px;${style}">${callback(item[field], field, result)}</span>`; } }); html += `<div class="protyle-wysiwyg__embed" data-id="${item.root_id}"><div data-node-index="1" data-type="NodeParagraph" class="p" updated=""><div contenteditable="true" spellcheck="false">${fieldsHtml}</div><div class="protyle-attr" contenteditable="false"></div></div></div>`; }); return render(html || '<div style="color:var(--b3-theme-secondary);margin-top:3px;">没有找到符合条件的内容</div>'); } // 查询SQL函数 async function query(sql) { const result = await fetchSyncPost('/api/query/sql', { "stmt": sql }); if (result.code !== 0) { console.error("查询数据库出错", result.msg); return "查询数据库出错:" + result.msg; } return result.data; } // 渲染结果函数 function render(html, style) { onRender('.b3-form__space--small').then((container) => { style = style || ''; if(style){ html = `<div class="protyle-wysiwyg__embed" style="${style}">${html}</div>`; } container.outerHTML = html; }); return []; } // 渲染错误输出 function error(html, style) { return render(`<div style="margin-top:3px;">${html}</div>`, style || 'color:red;'); } // 监听dom渲染 function onRender(selector) { return new Promise(resolve => { const check = () => { let el = item.querySelector(selector); if (el) resolve(el); else requestAnimationFrame(check); }; check(); }); } })();

    注意,以上 SQL 需要把你 SQL 中的 type='t'改为 type='d'。

    1 回复
  • 其他回帖
  • zflperson via macOS

    感谢你的回复

    方法 1,复制到 query 挂件点击查询,按钮显示红色,没有查询结果。查询思源文档好像是 type 是 d 的类型只会查询文档标题,不会查询内容。

    方法 2,复制到潜入块,返回显示没有符合条件的内容,我估计是因为文字是放在表格内的,所以查不到。

    不过我现在已经放弃用 SQL 语句来汇总了,我现在使用数据库来汇总,就是自己麻烦一点 😂 效果还是不错的。

    像这些比较专业的语句对非计算机专业的来说还是有点难度,我大部分语句都是 GPT 生成的,鼓捣鼓捣能用就行 😭

    截屏 2024112501.08.23.png

    1 回复
  • 可以看下 query 挂件的文档, 前面写法不同

    1 回复
  • zflperson via macOS

    非常感谢,query 查询已符合要求!

    嵌入块输入代码会把所有符合条件的文档的全部内容都列举出来了,这好像是嵌入块的特性导致的。不过没有关系,query 已经满足要求。

    再次感谢你的分享!

  • 查看全部回帖

推荐标签 标签

  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 29 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    412 引用 • 3588 回帖
  • Anytype
    3 引用 • 31 回帖 • 16 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 128 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    96 引用 • 901 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 397 关注
  • 自由行
    1 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 448 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 288 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 16 关注
  • OneDrive
    2 引用 • 1 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    169 引用 • 1145 回帖
  • 导航

    各种网址链接、内容导航。

    44 引用 • 177 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 201 关注
  • QQ

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

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

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 706 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 563 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 648 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 74 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 556 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    118 引用 • 54 回帖 • 5 关注