2013-02-15 54 views
1

我有一個表格,我可以點擊標題按不同的列對整個表格進行排序。 我想合併一些布爾狀態,這樣我可以點擊一次,按升序排列表格,然後再次點擊降序。如何通過點擊狀態對錶格進行升序和降序排序? 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

回答

2

如果你願意,你可以用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> 
相關問題