如何使用 query 筛选特定文档

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

截屏 2024112213.12.17.png

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

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

但是返回的是

截屏 2024112213.15.58.png

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

  • 思源笔记

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

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

    24764 引用 • 101799 回帖
  • Q&A

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

    9382 引用 • 42757 回帖 • 112 关注

相关帖子

被采纳的回答
  • 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 *

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 可以看下 query 挂件的文档, 前面写法不同

    1 回复
  • zflperson via macOS

    我鼓捣到现在也没搞明白,大神能教教我吗 😭

  • 方法一,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 回复
  • 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 *

    1 回复
  • zflperson via macOS

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

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

    再次感谢你的分享!

请输入回帖内容 ...

推荐标签 标签

  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 157 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 412 关注
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 266 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 637 关注
  • Excel
    31 引用 • 28 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    366 引用 • 1842 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 431 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    335 引用 • 324 回帖 • 1 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • SQLServer

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

    21 引用 • 31 回帖 • 3 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 701 关注
  • Facebook

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

    4 引用 • 15 回帖 • 442 关注
  • 思源笔记

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

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

    24764 引用 • 101799 回帖
  • 大数据

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

    93 引用 • 113 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 1 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • BookxNote

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

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

    1 引用 • 1 回帖 • 1 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • QQ

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

    45 引用 • 557 回帖 • 2 关注
  • 导航

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

    43 引用 • 177 回帖