如何通过点击状态对表格进行升序和降序排序? MYSQL/ColdFusion
问题描述:
我有一个表格,我可以点击标题按不同的列对整个表格进行排序。 我想合并一些布尔状态,这样我可以点击一次,按升序排列表格,然后再次点击降序。如何通过点击状态对表格进行升序和降序排序? MYSQL/ColdFusion
这里是我的代码:
<th><A HREF="thispage.cfm?sorter=creationDate">Creation Date</A> </th>
<cfif IsDefined("URL.sorter")>
<cfquery datasource="Pad" name="One">
select * from meeting
ORDER BY #URL.sorter# DESC
</cfquery>
<cfelse>
<cfquery datasource="Pad" name="One">
select * from meeting
ORDER BY contactName
</cfquery>
</cfif>
我相信它可以通过使用CFSET创建一个布尔变量,然后改变上点击表头和分配一个变量状态ASC,另一个变量的状态来实现在第一个查询中使用DESC。我只是不知道如何实现它。
答
如果你愿意,你可以用jQuery插件/ javascript很好地做到这一点。请参阅:Choosing a jQuery datagrid plugin?
但要做到这一点老式的方式,你可以在你的网址<th>
中添加方向。 如果你只对付一个头,你可以简单地这样做:
<cfif structKeyExists(url, "sortOrder") and url.sortOrder eq "ASC">
<url.sortOrder = "DESC">
<cfelse>
<url.sortOrder = "ASC">
</cfif>
<cfoutput>
<A HREF="thispage.cfm?sorter=creationDate&sortOrder=#url.sortOrder#">Creation Date</A>
</cfoutput>
如果你使用多个头的工作,你需要检查当前列的方向了。
<cfif (structKeyExists(url,"sorter") and url.sorter eq "{thisColumn}")>
and (structKeyExists(url, "sortOrder") and url.sortOrder eq "ASC")>
<url.sortOrder = "DESC">
<cfelse>
<url.sortOrder = "ASC">
</cfif>
你或许应该将它放入传递您要检查,所以你不要每次<th>
之前有同样的事情一遍又一遍的列值的函数,DRY(不要重复自己) 。
<A HREF="thispage.cfm?sorter=creationDate&sortOrder=#sortMe({thisColumn})#">{thisColumn}</A>
最后,方向添加到您的查询
<cfquery datasource="Pad" name="One">
select
columnName1
, columnName2
, columnName3
from
meeting
ORDER BY
#URL.sorter# <cfif structKeyExists(url,"sortOrder")>#url.sortOrder#</cfif>
</cfquery>
我想你会过得更好使用JavaScript或jQuery的事情了。其实看看cfgrid。它可能已经有了这个功能。我不知道,因为我从来没有使用它。 – 2013-02-15 10:55:30
'ORDER BY#URL.sorter#'这是一个sql注入风险。在SQL查询中直接使用它之前,请始终验证任何用户提供的输入。 – Leigh 2013-02-15 14:36:48