要求如下图所示,写 2 个 SQL
-
思源笔记
25502 引用 • 105454 回帖
思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。
融合块、大纲和双向链接,重构你的思维。
-
Q&A
9755 引用 • 44374 回帖 • 88 关注
提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。
相关帖子
-
wilsons • • 1付费者 捐赠者
如果仅用 SQL 实现的话,主要带有子任务的父任务不好处理。
我这里通过取巧的方式实现了仅 SQL 查询,需要一段 css 配合一下,原理就是把指定 SQL 的子任务给隐藏起来。
SQL1:在路径内随机索引单个任务项
-- random-task-hpath 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 SELECT * FROM blocks WHERE ( -- 👇这里可以添加更多路径,可在目录右键复制可读路径获取 hpath like '%/daily note/2024/12/111%' OR hpath like '%/daily note/2024/12/111%' ) AND type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
SQL2:在列表内随机索引单个任务项
-- radmom-task-list 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 WITH RECURSIVE Descendants AS ( -- 非递归部分,这是起始查询,选择指定id的初始记录 SELECT * FROM blocks WHERE id in( -- 👇这里可以添加更多列表id '20241222170944-o65g6ol', '20241222170955-k3mt4vd' ) UNION ALL -- 递归部分,将子记录不断加入结果集 SELECT b.* FROM blocks b JOIN Descendants d ON b.parent_id = d.id ) SELECT * FROM Descendants WHERE type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
css 代码:
/* 隐藏指定SQL的嵌入块中的子任务 */ [data-type="NodeBlockQueryEmbed"][data-content^="-- random-task-hpath"], [data-type="NodeBlockQueryEmbed"][data-content^="-- radmom-task-list"]{ [data-subtype="t"]:not([data-marker="*"]) { display:none; } }
说明:SQL 前面的
-- random-task-hpath
和-- radmom-task-list
注释不要删除,这是 css 定位元素的标志。不知是否是你想要的需求,我简单测试了下没发现问题,不知是否存在潜在问题,如果有问题可以随时反馈。
效果:
-
如果仅用 SQL 实现的话,主要带有子任务的父任务不好处理。
我这里通过取巧的方式实现了仅 SQL 查询,需要一段 css 配合一下,原理就是把指定 SQL 的子任务给隐藏起来。
SQL1:在路径内随机索引单个任务项
-- random-task-hpath 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 SELECT * FROM blocks WHERE ( -- 👇这里可以添加更多路径,可在目录右键复制可读路径获取 hpath like '%/daily note/2024/12/111%' OR hpath like '%/daily note/2024/12/111%' ) AND type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
SQL2:在列表内随机索引单个任务项
-- radmom-task-list 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 WITH RECURSIVE Descendants AS ( -- 非递归部分,这是起始查询,选择指定id的初始记录 SELECT * FROM blocks WHERE id in( -- 👇这里可以添加更多列表id '20241222170944-o65g6ol', '20241222170955-k3mt4vd' ) UNION ALL -- 递归部分,将子记录不断加入结果集 SELECT b.* FROM blocks b JOIN Descendants d ON b.parent_id = d.id ) SELECT * FROM Descendants WHERE type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
css 代码:
/* 隐藏指定SQL的嵌入块中的子任务 */ [data-type="NodeBlockQueryEmbed"][data-content^="-- random-task-hpath"], [data-type="NodeBlockQueryEmbed"][data-content^="-- radmom-task-list"]{ [data-subtype="t"]:not([data-marker="*"]) { display:none; } }
说明:SQL 前面的
-- random-task-hpath
和-- radmom-task-list
注释不要删除,这是 css 定位元素的标志。不知是否是你想要的需求,我简单测试了下没发现问题,不知是否存在潜在问题,如果有问题可以随时反馈。
效果:
1 回复 -
哦哦,如果需要筛选
[x]
和[ ]
状态可以按照下面的方式添加到条件里即可。
添加到这两个条件后面就行
WHERE type = 'i'
AND subtype = 't'比如
select * from blocks -- (其他SQL) WHERE type = 'i' AND subtype = 't' -- 匹配已选中的 AND markdown like '* [X]%' -- 匹配未选中的 AND markdown like '* [ ]%' -- 以上SQL一般没有问题,仅匹配第一个任务,能有效避免误选子任务 -- 如果有问题,也可以用下面的方式,更安全,但稍麻烦 -- 匹配已选中的,注意[X]中的X必须是大写,[ ]中有个英文空格 AND markdown like '%* [X] %' || TRIM(fcontent) || '%' -- 匹配未选中的,注意[X]中的X必须是大写,[ ]中有个英文空格 AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' ORDER BY RANDOM() LIMIT 1;
1 回复