为什么排序在MySQL中有效但在Coldfusion结果集中没有?

fre*_*ent 0 mysql sorting coldfusion

我正在运行Coldfusion8/MySQL 5.0.88并进行搜索,其结果需要ASC/DESC根据用户设置进行排序.

如果我在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
Run Code Online (Sandbox Code Playgroud)

这会产生在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>
Run Code Online (Sandbox Code Playgroud)

它只是列出没有任何订单的结果..

问题:
知道我做错了什么以及如何直接排序?

谢谢!

方案:

<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>
Run Code Online (Sandbox Code Playgroud)

因此,如果排序列或排序方向的提交值与允许列表不匹配,我将使用默认排序条件,否则使用提交的值.

Sey*_*sen 6

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

有关此主题的更多信息可以在Michael Sharman的博客文章中找到.