我正在運行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>
所以,如果對任一列進行排序或排序方向不匹配允許列表中,我使用的是默認的排序準則提交的值,否則提交的值。
不要在'ORDER BY'中使用'':http://www.chapter31.com/2008/11/22/cfqueryparam-does-not-work-in-order-by-什麼是我的選擇/ –
Seybsen
酷!你想讓這個答案,所以我可以檢查? – frequent
一定要檢查兩個變量。 – Leigh