【问题标题】:MySQL query within another query另一个查询中的 MySQL 查询
【发布时间】:2011-09-21 07:27:11
【问题描述】:

我正在使用一个名为DataTables (server-side processing) 的jQuery 插件。问题是它限制了您形成查询的方式。默认方法如下所示。

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    FROM   $sTable
    $sWhere
    $sOrder
    $sLimit
";

是否可以在使用此约束的同时使用我自己的复杂查询(可能包含 where 子句、连接等)?我需要能够根据情况“弹出”不同的查询,而不是每次都重写整个内容。

我只想拥有一个文件来处理对多个 DataTables 的请求并且只更改 SQL。如果不清楚,请发表评论。

【问题讨论】:

  • 哎呀!这是一场安全噩梦。
  • 什么意思?有人可以帮我弄清楚为什么我的问题已经有两个反对票了吗??
  • 顺便说一下,官网是这样发布的:datatables.net/release-datatables/examples/server_side/…
  • +1 以平衡不愿解释的反对者。
  • 从未使用过这个插件,所以我不知道如何更改查询。但我认为您可以通过此插件创建视图作为表格使用

标签: php jquery mysql jquery-plugins datatables


【解决方案1】:

我想也许没有 SQL 解决方案。根据我的查询,我可能需要创建一个函数来修改整个内容。

【讨论】:

    【解决方案2】:

    好吧,您的脚本需要返回一个 json 记录列表,同时考虑到 http 请求参数:

    • 过滤器(sSearch)
    • 排序 (iSortCol_* )
    • 当前页面(iDisplayStart 和 iDisplayLength)

    还需要返回过滤后的总记录数。

    如何在服务器端生成该列表取决于您自己,您可以编写任意复杂的查询。

    一种允许更复杂查询同时仍然最小化样板代码的方法是将示例的功能包装在类中,但将选择和计数查询提取到方法中。基类将返回您的示例中的查询,但您可以在子类中覆盖它,并返回您希望的复杂查询。但是您需要在生成过滤器、排序和页面参数时小心考虑它们。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多