我在Postgres中执行递归查询,以检索电子邮件及其线程子项的列表,如下所示:
WITH RECURSIVE cte (id, title, path, parent_id, depth) AS (
SELECT id,
title,
array[id] AS path,
parent_id,
1 AS depth
FROM emails
WHERE parent_id IS NULL
UNION ALL
SELECT emails.id,
emails.title,
cte.path || emails.id,
emails.parent_id,
cte.depth + 1 AS depth
FROM emails
JOIN cte ON emails.parent_id = cte.id
)
SELECT id, title, path, parent_id, depth FROM cte
ORDER BY path;
Run Code Online (Sandbox Code Playgroud)
在查找子级电子邮件之前,如何更改列表的顺序(例如,按标题排序)。我显然需要保留外部的ORDER BY,以便按树顺序检索列表,而Postgres不允许我在UNION ALL之前插入ORDER BY子句。
谢谢,
我的应用程序有许多System.out.println()语句.
我想从println捕获消息并将它们发送到标准记录器(Log4j,JUL等).
怎么做 ?
我一直在研究一个我们称之为"A"的分支.我刚刚意识到自从我上次提交以来我添加的代码应该是在特定的(实验性)分支中,而不是在"A"中.如何将更改提交到新分支并将分支"A"保留为上次提交时的状态?
Java世界有一个关于门户和portlet如何互操作的JSR-286标准:共享统一网页的软件组件.
似乎有许多门户实现.但是,是否存在可互换的portlet的实时"市场"?从我可以找到的搜索网络,它看起来非常不平衡 - 所有门户网站和没有portlet.这就像是有几十部Android手机而没有应用程序.
如果产品基于JSR-286(或其某些实现),那么企业客户有可能想要添加到门户网站的一堆portlet的可能性是多少?
令我感到震惊的是,大多数企业已经拥有一个类似门户网站的页面,这些页面基于他们选择的业务运行的ERP或CRM产品,甚至可能只是MS Outlook的"今日"页面.因此,如果我发布一个面向企业客户的新产品,并将其设为门户网站(而不是一组portlet),那么我的客户放弃现有IBM/SAP/Oracle门户网站并将我的门户网站用作新主页的可能性是多少?(我猜:不是很好.)如果我将它设置为一组兼容JSR-286的portlet,我的客户是否会有办法托管主机portlet?(我猜:也不好).
最后,JSR-286似乎对HTML + JavaScript非常无声,即门户和portlet如何在浏览器内互操作.这都是关于基于Java的服务器端的东西,定义了一种合作使用URL的方法,这样每个整页刷新都可以路由到正确的portlet.它似乎并不承认现代,丰富的AJAX方法.它只是顺便提到了AJAX.
这篇博客文章(及其下的评论)提供了许多思考的东西,似乎证实了我的怀疑:
专业的实践经验以及上述研究使我得出结论,门户架构缺乏足够的技术优势和区别特征,需要增加接受度.实际上,很少有应用程序可以将自己限制在portlet的孤立和完全不同的功能中,放弃这种程度的架构控制在企业级软件中是不现实的 ......门户架构成为主流技术的机会之窗不仅关闭了,但很久以前关闭了.
所以总结一下这是一个更连贯的问题:在这一点上我将通过构建JSR-286获得什么实际价值?
在投影仪框架中,我希望内容在框架上均匀分布.
使用option\documentclass [slidestop] {beamer}我可以很容易地指定内容为顶部/中心对齐但是当我在幻灯片上只有几个子弹时它们在顶部聚集在一起,我希望beamer自动决定它们之间的间距均匀地涂抹它们.
如果不通过反复试验来设置vspace,这是否可行?
我照看一个网站,它本质上必须在页面上加载相当多的图像和内容.我们尽可能地减少了元素和图形布局图像的数量,因此我们现在正在寻找增加浏览器中页面加载的方法.
有没有人知道任何延迟加载图像的代码,不需要像jQuery这样的框架?
我正在将一个数组传递给一个函数,我正在使用一些值全局初始化它.我在数组的末尾使用空字符串来确定数组长度.
现在,有没有办法自动初始化数组以在其末尾有额外的空项目,所以我没有机会从那里忘记它?就像char []的工作方式一样,它会为最终的IIRC增加额外的空值.
这是我现在使用的代码:
struct twostrings {
string s1, s2;
};
twostrings options[] = {
{"text1", "more text1"},
{"text2", "more text2"},
{"text3", "more text3"},
{""}, // tells that the array ends here
}
int get_len(twostrings opt[]){
int p = 0;
while(1){
if(opt[p].s1 == ""){
return p;
}
p++;
// now here is a possibility to go in infinite loop if i forgot the empty string.
// currently i have a code here that checks if p > 10000 and gives …Run Code Online (Sandbox Code Playgroud) .net ×2
c# ×2
java ×2
asp.net ×1
beamer ×1
branch ×1
c++ ×1
checkout ×1
dispose ×1
git ×1
git-checkout ×1
git-commit ×1
image ×1
javascript ×1
jsr286 ×1
latex ×1
lazy-loading ×1
logging ×1
mysql ×1
optimization ×1
out ×1
portlet ×1
postgresql ×1
recursion ×1
sql ×1
struct ×1
windows ×1