1ssss
关注
65526 号成员,2021-02-19 19:28:54 加入
855
个人主页 浏览
276
帖子 + 回帖 + 评论
56h46m
在线时长
领域展开
  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-17 18:31

    感谢 JeffreyChen 提供的这个 SQL 方案,非常简洁明了。👍 👍 👍

    完整方案如下

    SELECT * FROM blocks b
    WHERE b.root_id = '20251214091335-y0pudi9'
    AND (
        b.ial LIKE '%color%'
        OR EXISTS (
            SELECT 1 FROM spans s 
            WHERE s.block_id = b.id 
            AND s.ial LIKE '%color%'
        )
    )
    
    

    用的时候改一下查询文档的 ID 就行

    并且一定要把嵌入块设置 调节为:仅显示标题块。否则的话还是会查询到没有标记的块。

    PS:这个仅显示标题块 让你难以理解意思。很神奇的一个设置。

    PixPin20251217182720.png

    最后,我的几个 JS 方案也是可行的。按需选取。

  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-17 09:57

    我测试了一下,你这个查询还是有问题。

    1. 一开始我直接在主空间进行测试,你的代码还是老问题。没解决。但是你的截图很明显是正确的结果,我尝试排查问题
    2. 我为了测试,新建一个工作空间,那新建空间里面,导入你的 sy.zip 查询没有问题。这个 SQL 语法在新建空间没有问题。
    3. 但是我把这个查询代码在我主空间运行 就还是老问题。
    4. 为了排查问题,我在主空间把所有插件关闭,主题切换到默认白天,所有代码 css js 关闭。重新启动之后,还是无法实现在新建空间的效果。
    5. 我把主空间的测试文档导出 导入到 新建空间,发现这个问题不会修复。不会因为到了新建空间而修复。
    6. 我把新建空间的看起来没问题的测试文档导入到主空间,发现问题了,旧的查询块刷新后 还是没问题。但是一旦我用和旧的查询块 一样的代码,新建查询进行测试的时候,问题复现了。 哪怕把旧查询删除,也还是无用。录制视频如下
    7. 思源版本当前版本 v3.5.0
    8. 重新在新建空间进行 SQL 代码测试,问题出现。最早的正常情况无法复现 😭
    9. 我把我的思源文档导出 里面有截图,附上。查询带颜色的块主空间.sy.zip

    截图以及视频如下:PixPin20251217095134.png

    PixPin20251217091937.png

  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-16 23:17

    PixPin20251216231443.png

    这个 SQL 代码不行哈。还是会出现我帖子里说的问题:会把不相关的给查询出来。

    SELECT * FROM blocks 
    WHERE ial LIKE '%color%'
    UNION
    SELECT b.* FROM blocks b
    INNER JOIN spans s ON b.id = s.block_id
    WHERE s.ial LIKE '%color%'
    
    
  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-14 13:52

    天哪!我成了 我成了!!!!!!

    用的是 query view 代码如下


    PixPin20251214134505.png

    只查询标绿

    //!js
    const query = async () => {
        // 1. 初始化 (严格照抄你的例子2)
        let dv = Query.DataView(protyle, item, top);
        const currentId = Query.root_id(dv.protyle);
    
        // 2. 目标颜色 (绿色)
        const targetColor = "var(--b3-card-success-background)";
    
        // 3. SQL 查询
        const sql = `
            SELECT * FROM blocks 
            WHERE root_id = '${currentId}' 
            AND ial LIKE '%${targetColor}%'
            ORDER BY sort ASC
        `;
      
        let blocks = await Query.sql(sql);
    
        // 4. 渲染逻辑
        if (blocks.length === 0) {
            dv.addmd("> *No highlights found.*");
        } else {
            // 【关键修正】
            // 不用 dv.header,直接用 Markdown 语法写标题
            // 遍历 blocks,只提取 aslink (原子链接),拼接成无序列表
            const mdContent = "### 🟢 S1 核心要义聚合\n" + 
                              blocks.map(b => `- ${b.aslink}`).join('\n');
          
            dv.addmd(mdContent);
        }
    
        dv.render();
    }
    
    return query();
    

    标绿中间划线隔开

    //!js
    // 1. 定义单行渲染模板 (参考你的例子2)
    // 这里只取 b.aslink,确保不带出子节点
    const row = (b) => `
    {{{col
    **${b.aslink}**
    {: style="flex: 1;" }
    }}}
    {: style="border-bottom: 1px dashed var(--b3-theme-on-surface-light); padding: 8px 0;" }
    `.trim();
    
    const query = async () => {
        let dv = Query.DataView(protyle, item, top);
        const currentId = Query.root_id(dv.protyle);
        const targetColor = "var(--b3-card-success-background)";
    
        const sql = `
            SELECT * FROM blocks 
            WHERE root_id = '${currentId}' 
            AND ial LIKE '%${targetColor}%'
            ORDER BY sort ASC
        `;
      
        let blocks = await Query.sql(sql);
    
        if (blocks.length === 0) {
            dv.addmd("> *当前文档无绿色标记*");
        } else {
            // 【关键修正】用 addmd 渲染标题 + 内容
            // 标题
            dv.addmd("### 🟢 S1 核心 Dashboard");
          
            // 内容:把所有块通过 row 函数处理,然后用换行符连接
            dv.addmd(blocks.map(row).join('\n'));
        }
    
        dv.render();
    }
    
    return query();
    

    全色块查询/信息 成功 警告 错误汇总

    //!js
    // 1. 定义颜色配置 (用于识别和上色)
    const colorMap = {
        "success": { 
            bg: "var(--b3-card-success-background)", 
            border: "var(--b3-card-success-color)" 
        },
        "warning": { 
            bg: "var(--b3-card-warning-background)", 
            border: "var(--b3-card-warning-color)" 
        },
        "error":   { 
            bg: "var(--b3-card-error-background)",   
            border: "var(--b3-card-error-color)" 
        },
        "info":    { 
            bg: "var(--b3-card-info-background)",  
            border: "var(--b3-card-info-color)" 
        }
    };
    
    // 2. 定义单行渲染模板
    const row = (b) => {
        // 自动检测当前块属于哪种颜色,决定边框颜色
        let borderColor = "var(--b3-theme-on-surface-light)"; // 默认灰色
      
        // 遍历查找匹配的颜色
        for (let type in colorMap) {
            if (b.ial && b.ial.includes(colorMap[type].bg)) {
                borderColor = colorMap[type].border;
                break;
            }
        }
    
        // 渲染:只取 aslink (原子链接),并加上对应颜色的底边框
        return `
    {{{col
    **${b.aslink}**
    {: style="flex: 1;" }
    }}}
    {: style="border-bottom: 2px solid ${borderColor}; padding: 6px 0;" }
    `.trim();
    };
    
    const query = async () => {
        let dv = Query.DataView(protyle, item, top);
        const currentId = Query.root_id(dv.protyle);
    
        // 3. 构建 SQL 的 OR 条件
        // 生成类似: ial LIKE '%success%' OR ial LIKE '%warning%' ...
        const conditions = Object.values(colorMap)
            .map(c => `ial LIKE '%${c.bg}%'`)
            .join(' OR ');
    
        const sql = `
            SELECT * FROM blocks 
            WHERE root_id = '${currentId}' 
            AND (${conditions})
            ORDER BY sort ASC
        `;
      
        let blocks = await Query.sql(sql);
    
        if (blocks.length === 0) {
            // 如果没数据,显示灰色提示
            dv.addmd("> *当前文档无 S1 标记 (绿/黄/红/蓝)*");
        } else {
            // 标题
            dv.addmd("### 🌈 S1 全光谱 Dashboard");
            // 渲染列表
            dv.addmd(blocks.map(row).join('\n'));
        }
    
        dv.render();
    }
    
    return query();
    

    感谢大家建议

    从 SQL 里面出来了,SQL 可能做不到这点。【如果 SQL 能做到的话麻烦安利一下哈 毕竟 js 有点复杂的样子。】

    js 做到了。

  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-14 13:39

    怎么说呢?我觉得挺清晰的。😂

    我的要求就是把一个文档里面,我所有标绿的块都给筛选出来。就这么简单的需求。

    【使用场景:现在用 AI 很多,AI 很多分析,我只想要把我重视的信息汇总起来。但是我又不想把过程文档全部删除。我希望我看到一些信息很好,就直接 alt+X 标绿,然后在文档末尾处使用查询 汇总起来。
    为何是 alt+X 呢?因为只有 alt+X 是思源原生支持跨块选中一键标绿的。其他的都有些麻烦。】

    但是实际上尝试用 SQL 查询,就总是会筛选到上级标题 下级节点。没有标绿的都会被筛选到。搞了十几个代码总是无法解决,头疼。
    搞替代方案的话 你说的块自定义标注是一个 标签是一个 ,标记后 用 汇总行级元素 也是一个方法。 就是感觉差点意思。
    感觉理论上思源用 SQL 语法可以直接查询,很简单的样子,但是却一直搞不定。头疼。

  • SQL 嵌入查询的致命缺陷:递归死循环与无法实现“原子级”内容聚合

    2025-12-14 12:49

    感谢各位老哥的批评,确实是我犯懒了,直接把 AI 生成的总结发出来,没考虑到大家的阅读体验,抱歉。
    我的核心需求非常简单: 我习惯用 Alt+X 给大纲列表里的某一行(列表项)上色标记重点。 我想在文档顶部,用 SQL 把本文档内所有标了颜色的这一行字汇总展示出来。
    遇到的卡点:
    用 SQL 查 ial 颜色属性,因为我标的是列表项(容器),思源会强制把这一行下面 【或者上面】的所有子节点(笔记正文)全显示出来,导致结果很乱。
    我想实现:“只显示标绿的那一行字,不要显示它下面的子内容”。
    请问如果不使用插件,原生 SQL 有办法做到“只渲染父级内容”吗? 如果原生做不到,我就去研究大家推荐的 Query View 和关键信息导航插件了。感谢指路!

    @@participants

  • 嵌入块嵌入设置失效,文档标题无法显示

    2025-11-16 18:12

    发生了更加奇葩的现象。。。 😐

  • 嵌入块嵌入设置失效,文档标题无法显示

    2025-11-16 17:40

    但是问题来了,四个嵌入块的设置都没反应啊 这也是问题。文档块无法无法显示,

    但是对于段落标题块也没反应 。。PixPin20251116173927.png

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-03 09:17

    有 9 月的快照。然后怎么处理?直接回滚的话会丢失这几个月创建的内容吗?

    但是回滚之后,假设找到了这个文档,然后把这个文档复制粘贴到现在的时间点吗?

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-03 08:49

    试了,不行,因为只有 30 天历史最早到 10 月 4 号。最早的中间的都找不到。这可能意味着在此之前就丢失了。。。

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-03 08:45

    并没有忽略搜索,没去设置的。 语法块有用虽然没找到,感谢。

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-02 23:22

    Snipaste20251102231947.png

    date 和 history 都看了,找不到。

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-02 23:00

    今天要找的文章我正好是截图保存在手机。所以只是思源里面找不到了。

    主要是我不知道是否就一个文件丢失了,我是今天有事想起来要用去搜才发现找不到。这个问题就难搞了。【憋屈,不知道哪里使劲 😳 】

    用的是官方同步啊,没想到出现这个问题。因为最近同步没异常,数据快照也找不到异常点。

    你那个备份软件我研究一下,害 。。醉了

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-02 22:54

    。。。你怎么会这么说。我是完全记得内容。文章完整截图还在我手机里面保存着。毕竟是付费文章。付费日期,截图,当天直接输入思源。

    我搜了好多个关键词。都找不到。。。

  • SQL 语法求助:查询在 2025 年 9 月 2 号创建的笔记,存在文档丢失

    2025-11-02 11:41

    数据快照也找不到,最近应该也没啥异常。PixPin20251102114046.png

  • 复制 Markdown 无法识别星号前的符号

    2025-10-23 12:07

    见录屏。

    正常的 Ctrl+C 复制粘贴不行。看看是不是你们说的转义的问题

    我就是想要能正常 Ctrl+C 复制粘贴,保留格式。

    这个就是常规操作。

    不管是不是转义的问题,这个经常用的常规操作得处理。

    这么多人用 AI,一旦复制都会遇到这样的情况。

  • 复制 Markdown 无法识别星号前的符号

    2025-10-23 08:16

    Snipaste20251023081543.png

    开了。

    也没转义吧

  • 复制 Markdown 无法识别星号前的符号

    2025-10-22 10:26

    但是为什么 粘贴之后,我在第二组** 后添加空格,也还是无法加粗?

    情况又不太一样。

    Snipaste20251022102352.png


    现在 AI 用的多,每次把 AI 的回答 Markdown 复制到思源之后,都有一些无法识别的情况。后续调整也非常麻烦。

    这个情况太经常出现了,不知道有什么解决方法。

  • 传说哥! 10.19 号更新, 终极标签解决方案!! 极大的增加了可玩性... 爽死了..

    2025-10-15 14:32

    Snipaste20251015142505.png点击感谢就是打赏。


    这是积分规则

    Snipaste20251015142630.png

    经验分享贴更新应当不消耗积分,区别求助问题帖

    社区积分机制逼迫我成为了一个自私的纯粹索取者

    积分转账取消了吗

    https://ld246.com/search?q=%E7%A7%AF%E5%88%86&ot=true

    积分问题之前也有群友反馈,感觉一直不受重视。导致一个社群没有人愿意持续更新精品帖子,不知道怎么想的

    也没给一个解决方案。

  • edge 浏览器无法使用思源剪藏

    2025-10-07 19:51

    沉痛的决定:我决定 转 Chrome 了。 @participants

  • edge 浏览器无法使用思源剪藏

    2025-10-07 16:20

    不仅插件有卸载重装过,甚至浏览器都卸载重装过。

    重装无用,最新版本。

    并且插件是英文显示的,并无魔法。而其他 Chrome 或星愿都是中文。

    层考虑是否是地区的问题,用魔法移动到国外之后,edge 浏览器就无法下载思源剪藏插件:显示下载失败

    而在国内能正常下载安装,但是却无法正常使用。

    Snipaste20251007161913.png

    Snipaste20251007161952.png

  • 一天淬一刃!我上架了挂件:汇总行级元素

    2025-10-07 09:13
    1. 目前的汇总只是把标记的字符给汇总了。而不是把整个块进行汇总。建议:提供汇总局部元素,汇总对应的块 的选择项:
      1. 使用背景有时候,我们对一句话里面的关键词进行标记。而那一段话都是背景有效的,单独的关键词摘出来是无效的。
    2. 建议能支撑对于有背景颜色的筛选汇总
      1. 背景:因为 alt+X 可以把整个块进行 背景高亮。而无需局部选中,是思源比较好用的功能。如果想要汇总一些重点,在文章中直接把对应的小块进行 alt+X 背景色标记。然后在结尾处进行汇总,那么这整个过程就是一条龙了。而如果按照目前的情况,想要使用汇总的话,先进行标记。而一般的标记功能都需要先选中文字然后进行,不如直接 alt+X 直接标记整个块直接方便。
  • edge 浏览器无法使用思源剪藏

    2025-10-07 07:31

    插件版本 edge Chrome 星愿都是 1.13.7

    Snipaste20251007073059.png

  • [js] 解决迅速调整标题层级问题

    2025-10-06 22:07

    好代码 👍 好 js👍

  • 退出聚焦后定位动画时间太长

    2025-10-05 22:27

    还真是,我测试了一个十万字的文档。

    发现就没有很长的滚动,接近直接定位了一秒内。

    但是 500 多字的文档就有 2 秒的滚动时长。

    Snipaste20251005222409.png