2012-08-24 71 views
0

我正在運行Coldfusion8/MySQL 5.0.88並進行搜索,其結果需要根據用戶設置對ASC/DESC進行排序。爲什麼在MySQL中排序但在Coldfusion結果集中不能排序?

如果我運行MySQL中此查詢,它的工作原理:

SELECT a.* 
    FROM artikelstammdaten a 
     WHERE a.aktiv = "ja" 
     AND a.firma LIKE '%test_comp%' 
    GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung 
    HAVING sum(a.bestand) != 0 OR (a.nos = "ja" AND a.nos_anzeige = "ja") 

    ORDER BY a.preis_aktuell ASC 
    LIMIT 0, 24 

這將產生在MySQL運行預期的結果。但是,如果我這樣做ColdFusion中:

<cfquery datasource="db" name="results"> 
     SELECT a.* 
      FROM artikelstammdaten a 
      WHERE a.aktiv = "ja" 
<cfif LOCAL.search.s_firma neq "" AND LOCAL.search.s_firma neq "Default"> 
      AND a.firma LIKE <cfqueryparam value="%#LOCAL.search.s_firma#%" cfsqltype="cf_sql_varchar"> 
    </cfif> 
     GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung 
     HAVING sum(a.bestand) != 0 OR (a.nos = "ja" AND a.nos_anzeige = "ja") 

     ORDER BY <cfqueryparam value="#variables.sortierung#" cfsqltype="cf_sql_varchar"> <cfqueryparam value="#variables.sortierung2#" cfsqltype="cf_sql_varchar" maxlength="4"> 
     LIMIT <cfqueryparam value="#variables.first#" cfsqltype="cf_sql_numeric">, <cfqueryparam value="#variables.last#" cfsqltype="cf_sql_numeric"> 
</cfquery> 

它只是列出了結果,沒有任何順序..

問:
任何想法,我做錯了,以及如何獲得直排序?

謝謝!

解決方案

<cfset variables.allowSort = "DESC,ASC,all_columns_names_that_are_ok,seperated_by_comma"> 
<cfif listfindnocase(variables.allowSort, variables.sortierung, ",") EQ 0> 
    ORDER BY a.artikelnummer DESC 
<cfelse> 
    ORDER BY #variables.sortierung# #variables.sortierung2# 
</cfif> 

所以,如果對任一列進行排序或排序方向不匹配允許列表中,我使用的是默認的排序準則提交的值,否則提交的值。

+1

不要在'ORDER BY'中使用'':http://www.chapter31.com/2008/11/22/cfqueryparam-does-not-work-in-order-by-什麼是我的選擇/ – Seybsen

+0

酷!你想讓這個答案,所以我可以檢查? – frequent

+0

一定要檢查兩個變量。 – Leigh

回答

6

您不能在ORDER BY中使用<cfqueryparam ...>

More information關於此主題可以在Michael Sharman的此博客文章中找到。

+0

謝謝!完美的作品。我正在使用允許列表。編輯我的問題。 – frequent