我正在开发一个API,在其中,我根据请求中收到的条件树生成查询。 以下是树格式:
它应该在SQL查询中翻译成这样:
WHERE (a>b OR c<d) AND (e>f OR g<h)
或者,像这样
WHERE ((a>b) OR (c<d)) AND ((e>f) OR (g<h))
使用预订序遍历,我可以生成查询。但是,我无法附加括号。以下是我的inOrder遍历代码:
public void inorder(Filter n, StringBuilder builder) {
if (n != null) {
inorder(n.getLeft(), builder);
print(n, builder);
inorder(n.getRight(), builder);
}
}
private void print(Filter node, StringBuilder builder) {
if (null == node.getField() || null == node.getValue()) {
builder.append(node.getLogicOperator());
} else {
builder.append((node.getField() + " " + node.getComparisonOperator() + " " + node
.getValue()));
}
builder.append("\n");
}
有人可以指导我插入括号的位置吗? 提前谢谢。
**** ****更新
现在,我想从同一个结构生成mongo查询。我能够生成字符串但无法附加括号:我想要这样的东西:
$and : [
{ $or : [ { a: b}, { c: d } ] },
{ $or : [ { e: f}, { g: { $lt : h} } ] }
]
有人可以帮忙吗?
答案 0 :(得分:0)
如果按顺序遍历树,输出将为:
inorder_traversal(n) = "(" + inorder_traversal(leftchild(n)) + n +
inorder_traversal(rithtchild(n)) + ")"
它包括一些不必要的括号,但它不应该是一个大问题。
对于你的例子,它就像:
( traversal(leftOR) AND traversal(rightOR) )
( ( traversal(a>b) OR traversal(c<d) ) AND ( traversal(e>f) OR traversal(g<h) )
( ( ( a>b ) OR ( c<d ) ) AND ( ( e> f) OR ( g<h ) ) )