如何通过点击状态对表格进行升序和降序排序? 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。我只是不知道如何实现它。

+0

我想你会过得更好使用JavaScript或jQuery的事情了。其实看看cfgrid。它可能已经有了这个功能。我不知道,因为我从来没有使用它。 – 2013-02-15 10:55:30

+0

'ORDER BY#URL.sorter#'这是一个sql注入风险。在SQL查询中直接使用它之前,请始终验证任何用户提供的输入。 – Leigh 2013-02-15 14:36:48

如果你愿意,你可以用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>