如何使用 query 筛选特定文档

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

截屏 2024112213.12.17.png

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

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

但是返回的是

截屏 2024112213.15.58.png

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

  • 思源笔记

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

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

    23030 引用 • 92646 回帖
  • Q&A

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

    8454 引用 • 38507 回帖 • 155 关注

相关帖子

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

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • zflperson

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

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

    再次感谢你的分享!

  • 其他回帖
  • 方法一,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

    感谢你的回复

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

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

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

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

    截屏 2024112501.08.23.png

    1 回复
  • zflperson

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

  • 查看全部回帖

推荐标签 标签

  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 668 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 4 关注
  • 代码片段

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

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

    90 引用 • 569 回帖
  • Kotlin

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

    19 引用 • 33 回帖 • 63 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用
  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖
  • HTML

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

    107 引用 • 295 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    728 引用 • 1273 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖 • 1 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 24 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1737 回帖 • 3 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    177 引用 • 816 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 6 关注
  • VirtualBox

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

    10 引用 • 2 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 745 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    223 引用 • 474 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 5 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1388 回帖 • 277 关注
  • 倾城之链
    23 引用 • 66 回帖 • 138 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 172 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    7 引用 • 40 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Q&A

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

    8454 引用 • 38505 回帖 • 155 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 50 关注
  • 七牛云

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

    27 引用 • 225 回帖 • 162 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖