最近创建了一个电影库,如图所示
我想建立一个数据库分类已看和未看,目前的语句是
select * from blocks
where markdown like '%已看%' and type ='t'
ORDER BY updated desc
但是返回的是
请问我如何才能只显示符合条件的文档标题而不是显示这么一大串呢?
最近创建了一个电影库,如图所示
我想建立一个数据库分类已看和未看,目前的语句是
select * from blocks
where markdown like '%已看%' and type ='t'
ORDER BY updated desc
但是返回的是
请问我如何才能只显示符合条件的文档标题而不是显示这么一大串呢?
确实这里 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 写法不对,因为你查找的是文档中的子块内容,所以要先查询子块,然后按 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'。
Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。
知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。
jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
希望你我能在旅途中找到人生的下一站。
Postman 是一款简单好用的 HTTP API 调试工具。
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。
Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用 。
Mobi.css is a lightweight, flexible CSS framework that focus on mobile.
提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。
单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。
Quicker 您的指尖工具箱!操作更少,收获更多!
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.
NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。
PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。