最近创建了一个电影库,如图所示
我想建立一个数据库分类已看和未看,目前的语句是
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 查询挂件
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'。
Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。
Open Source, Open Mind, Open Sight, Open Future!
七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。
希望你我能在旅途中找到人生的下一站。
大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。
BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。
笔记整理交给我,一心只读圣贤书。
Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。
WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。
Postman 是一款简单好用的 HTTP API 调试工具。
VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。
代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。
用户在该标签下分享代码片段时需在帖子标题前添加 [css]
或 [js]
用于区分代码片段类型。
各种网址链接、内容导航。
Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。
Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。
Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。
Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。
Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。