【问题标题】:datatables checkbox to toggle WHERE clause用于切换 WHERE 子句的数据表复选框
【发布时间】:2011-10-10 23:09:59
【问题描述】:

好的,所以我目前正在使用冷融合很好地填充我的数据表,并且一切都很完美。我的 SQL 中的一列是状态。目前我正在返回所有结果 WHERE status != 'Completed'

目前这工作正常,但我真正想做的是在数据表上方的页面上放置一个复选框,选中后它将显示所有记录,包括已完成的记录。

问题是,我可以在复选框上进行某种回调以动态省略 where 子句,还是将所有记录传送到数据表并在那里过滤?我唯一担心的是当数据库变大时,返回所有记录可能需要一段时间,而且 90% 的时间会被过滤掉。

无论哪种方式,代码 sn-ps 都会很有帮助!

谢谢

【问题讨论】:

  • 我现在给你的唯一建议是遵循你自己的建议:“code sn-ps 会很有帮助!”向我们展示您到目前为止所做的尝试。
  • 您应该在数据库中对数据进行分页,并且一次只返回 X # 行。向您的复选框添加一个 .click() 事件,该事件将重新触发您原来的 .ajax() 调用,并传递复选框的值。
  • Brian,您应该将您的解决方案作为答案,然后您可以将此问题标记为已解决。 (在 Stack Overflow 上回答您自己的问题是完全可以接受的。)

标签: jquery sql coldfusion datatables


【解决方案1】:

已解决

iKnowKungFoo 是对的。由于我在datatables 中使用了分页,因此无论如何查询都仅限于这些行,从而消除了对大返回结果的担忧。 我实现了以下代码来放置一个jqueryui 切换按钮。

js

$('#completed_button').bind('change', function(){
   if($(this).is(':checked')){
      $(this).button('option', 'label', 'Hide Completed');
      oTable.fnFilter('Completed',6,false);
   } else {
      $(this).button('option', 'label', 'Show Completed');
      oTable.fnFilter('',6,false);
   }
});

html

<input class="toggle-button" id="completed_button" type="checkbox"  /><label for="completed_button">Show Completed</label>

SQL

WHERE 1 =1 
<cfif trim(url.sSearch_6) NEQ "Completed">
   AND TS.tickets_status_id != <cfqueryparam cfsqltype="cf_sql_integer" value="13" />
</cfif>

【讨论】:

    【解决方案2】:

    我会说该方法取决于您预期的数据量。如果该复选框将仅过滤或包含少量记录,请将它们包含在数据返回中并在客户端过滤它们。如果该复选框将对结果集产生很大影响,则在更改复选框时重新触发数据调用并在服务器上进行过滤可能是更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多