【问题标题】:Is it possible to build SQL statements including 'XOR' condition with jQuery QueryBuilder是否可以使用 jQuery QueryBuilder 构建包含“XOR”条件的 SQL 语句
【发布时间】:2022-01-11 20:45:17
【问题描述】:

我想使用 jQuery QueryBuilder 插件获取 SQL 语句。使用默认条件“AND”和“OR”时,一切都完全按照我的意愿工作。但是,当我尝试使用“XOR”条件时,会出现错误(见下文)。

这是我的 QueryBuilder 代码:

$(document).ready(function () {
  var options = {
    allow_empty: true,

    filters: [
      {
        id: "name",
        label: "Name",
        type: "string",
        default_value: "Noah",
        size: 30,
        unique: true,
      },
    ],

    /* XOR does not work with SQL */
    conditions: ["AND", "OR", "XOR"],
  };

  $("#builder").queryBuilder(options);

  $(".parse-json").on("click", function () {
    var res = $("#builder").queryBuilder("getSQL", $(this).data("stmt"), false);
    console.log(
      res.sql +
        (res.params ? "\n\n" + JSON.stringify(res.params, undefined, 2) : "")
    );
  });
});

这是我网站上 QueryBuilder 的示例图片: click here

如前所述,当我选择“OR”条件时,我会得到所需的 SQL 语句。

name = ? OR name = ?

[
  "Noah",
  "James"
]

但是当我选择“XOR”条件时,我收到一条错误消息:

Uncaught Error: Unable to build SQL query with condition "XOR"
  at Function.error (jquery-2.x-git.min.js:2)

在这里你可以找到给出错误的文件:jquery-2.x-git.min.js:2

我已经在互联网上搜索了 2 个多小时,但我找不到任何远程指向该方向的东西。 非常感谢任何帮助。

**值得注意的一点是,当将规则提取为对象而不是 SQL 语句时,“XOR”条件起作用。在这里您可以看到用于将语句作为对象获取的代码:

$(".parse-json").on("click", function () {
  console.log(
    JSON.stringify($("#builder").queryBuilder("getRules"), undefined, 2)
  );
});

【问题讨论】:

    标签: javascript jquery sql jquery-query-builder


    【解决方案1】:

    不,这是不可能的,conditions 属性只允许'AND''OR' 作为值,如documentation 中所述:

    Name type default description
    […]
    conditions string[] ['AND', 'OR'] Array of available group conditions. Use the lang option to change the label.
    […]

    似乎在 2018 年报告了一个问题,但在没有任何明显解决方案的情况下已关闭:https://github.com/mistic100/jQuery-QueryBuilder/issues/645


    我研究了更多,但不是很明确。显然,存储库中甚至有使用“XOR”和“NAND”作为条件的测试:https://github.com/mistic100/jQuery-QueryBuilder/blob/dev/tests/core.module.js。这与文档所述相反。

    【讨论】:

    • github上报告的那个问题也是我发现的。看来我必须找到解决它的方法。感谢您的帮助!
    • @NoahKlop 在问题中包含此类先前的研究总是一个好主意。它可以节省回答者查找您已经知道的内容的时间。
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多