分享利用 SQL 以两种方法实现任务管理

本贴最后更新于 720 天前,其中的信息可能已经沧海桑田

前提

本文分享的 SQL 代码推荐配合以下规定格式(无序列表 + 任务)使用:

  • 任务分类(自定义,最好使用块引用,方便使用反链汇总)

    • 具体任务 1
    • 具体任务 2
    • ...

方法 1——利用嵌入块

实现代码

1.已完成任务

SELECT * FROM blocks WHERE (id in (SELECT parent_id FROM blocks WHERE type='l' AND markdown LIKE '%[x]%'  AND subtype='t' )) ORDER BY updated DESC

2.待办任务

SELECT * FROM blocks WHERE (id in (SELECT parent_id FROM blocks WHERE type='l' AND markdown LIKE '%[ ]%'  AND subtype='t' )) ORDER BY updated DESC

实现效果

image.png

特点

  • 优点:
    1. 可以同时显示任务项和所属分类。
    2. 即使未按照规定格式记录任务,也可通过任务记录所在的文档名称显示任务项的从属关系。
    3. 所有任务都能够直观显示。
  • 缺点:
    1. 无法直观显示任务的创建时间和更新(完成)时间。
    2. 并列的任务(同一个分类下多个子任务)如果只有部分完成则无法完全区分开,“已完成任务”和“待完成任务”中都将显示。
    3. 所有任务都显示出来占据篇幅大,可以通过 LIMIT 限制。

方法 2——利用 Query 挂件

实现代码

1.已完成任务

SELECT
    CASE
        WHEN b.fcontent == '' 
        THEN '==**未分类**=='
        ELSE b.fcontent 
    END AS __1____pre__任务分类,
    '['||
        CASE
            WHEN length(replace(b.content,b.fcontent,''))>16
            THEN substr(replace(b.content,b.fcontent,''),1,16)||'...'
            ELSE replace(b.content,b.fcontent,'')
        END||'](siyuan://blocks/'||b.id||')' AS __2____pre__已完成任务列表,
    b.created AS __3____datetime__创建时间,b.updated AS __4____datetime__更新时间,
    '['||b.hpath||'](siyuan://blocks/'||b.id||')' AS __5____pre__任务路径
FROM
    blocks AS b
WHERE
    ( id in
        (SELECT parent_id FROM blocks
        WHERE
        (type = 'l'
        AND
            markdown LIKE '%[x]%'
        AND
            subtype = 't'
        AND
            hpath NOT LIKE '%从这里开始%'
        )
        )
    )
ORDER BY
    b.updated DESC
LIMIT 20

2.待办任务

SELECT
    CASE
        WHEN b.fcontent == '' 
        THEN '==**未分类**=='
        ELSE b.fcontent 
    END AS __1____pre__任务分类,
    '['||
        (CASE
            WHEN length(replace(b.content,b.fcontent,''))>16
            THEN substr(replace(b.content,b.fcontent,''),1,16)||'...'
            ELSE replace(b.content,b.fcontent,'')
        END)||'](siyuan://blocks/'||b.id||')' AS __2____pre__待完成任务列表,
    b.created AS __3____datetime__创建时间,b.updated AS __4____datetime__更新时间,
    '['||b.hpath||'](siyuan://blocks/'||b.id||')' AS __5____pre__任务路径
FROM
    blocks AS b
WHERE
    ( id in
        (SELECT parent_id FROM blocks
        WHERE
        (type = 'l'
        AND
            markdown LIKE '%[ ]%'
        AND
            subtype = 't'
        AND
            hpath NOT LIKE '%从这里开始%'
        )
        )
    )
ORDER BY
    b.updated DESC
LIMIT 20

实现效果

image.png

image.png

特点

  • 优点:
    1. 显示效果更直观,包括任务分类、任务项、创建时间、更新(完成)时间、任务记录的位置。
    2. 对于任务项字数比较多的问题,为避免列宽过大,仅显示前 16 个字符。
    3. 占据篇幅更小。
  • 缺点:
    1. 需要严格按照规定格式记录任务,否则显示效果不佳(如上图标注)。
    2. 并列的任务(同一个分类下多个子任务)在列表中只会显示第一个任务的文字,要查看未完成/已完成的任务需要通过悬浮窗查看。

总结

  • 以上方法参考了其他用户的帖子,感谢。
  • 方法 1 和方法 2 各有优缺点,目前还不完美,大家根据需要选用。
  • 本文所使用的任务记录方法不限制记录位置,可以随时随地记录,推荐在 daily note 中记录。任务分类(块引用)放在无序列表中,方便后期利用反链整理汇总。
  • 思源笔记

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

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

    22353 引用 • 89451 回帖

相关帖子

欢迎来到这里!

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

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