0

実行していて、ユーザー設定に応じて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

これにより、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>

したがって、並べ替え列または並べ替え方向のいずれかで送信された値が許可リストと一致しない場合は、デフォルトの並べ替え基準を使用します。それ以外の場合は、送信された値を使用します。

4

1 に答える 1

6

<cfqueryparam ...>では使えませんORDER BY

このトピックの詳細については、Michael Sharman によるこのブログ投稿を参照してください。

于 2012-08-24T11:07:34.507 に答える