2

ORDER BY で cfqueryparam を使用して、「School of」に一致するタイトルを最初にリストし、残りのタイトルをリストする方法を教えてください。これが私の現在のクエリです:

<cfquery name="getblogs" dbType="query">
   SELECT title, id,description,date_registered,public1,uri
   FROM myquery 
where public1<>0
order by title asc
</cfquery>

最初に「School of」タイトルによるフィルターを使用し、次に残りを ASC で注文できる構文は何ですか。

編集: IDの一致に基づいて特定のタイトルを出力するにはどうすればよいですか? これを試しましたが、エラーが発生します。

<cfquery name="getschoolblogs" dbType="query">
   SELECT id, title, uri 
   FROM   myquery 
   WHERE  id = 396,378
   ORDER BY title asc
</cfquery>
4

3 に答える 3

2

sの方法の1つは、次のようなものです。

<cfquery name="getblogs" dbType="query">
   SELECT title, id,description,date_registered,public1,uri,
   CASE left(title, 9) WHEN 'School of' THEN 1 ELSE 2 END as sortIdx
   FROM myquery 
   where public1<>0
   order by sortIdx, title asc
</cfquery>

あなたは状態にいくつかのより良い変化をすることができます、それは頭に浮かんだ最初のものです。

于 2012-10-23T19:21:33.067 に答える
2

QoQは非常に限られています。自然な並べ替え順序をそのように変更するために必要な演算子や関数はサポートされていません。できることはCASE、データベース クエリで を使用して、追加の並べ替え列を作成することです。次に、データベース クエリまたは QoQ で並べ替えます。

     SELECT CASE WHEN title LIKE 'School of %' THEN 1
                 ELSE 2
            END AS TitleSortValue
            , title id,description,date_registered,public1,uri
     FROM   YourTable
     ORDER BY TitleSortValue, Title ASC

cfqueryparamまた、 ORDER BY 句では使用できません。cfqueryparam は、入力がsql として評価されるのを防ぎます。したがって、オブジェクトではなく、単純な値でのみ使用できます (つまり、テーブルまたは列の名前)。

where id=396,378

編集:後の質問に答えるには、単一の値のみを と比較できます=IN (...)複数の値でフィルタリングするために使用します。

   WHERE ID IN  ( <cfqueryparam value="#listOfIDValues#" 
                      cfsqltype="cf_sql_integer"
                      list="true">
                )
于 2012-10-23T19:20:02.257 に答える
0

必要のない列を返す必要はありませんが、同じ結果を得るには、order by で case ステートメントを使用するだけです。

<cfquery name="getblogs" datasource="dsn">
   SELECT title, id, description, date_registered, public1, uri
   FROM   tbl_blogs
   WHERE  public1<> 0
   ORDER BY CASE left(title, 9) WHEN 'School of' THEN 1 ELSE 2 END,
            title ASC
</cfquery>

これにより、不要なデータが返されるのを回避できます。

于 2012-10-24T05:47:38.413 に答える