0

私がやっているサイトでは、ユーザーは次のような検索文字列を入力できます

 "do you have foo bar"

Coldfusion8 を使用して、次のように | で区切られたリストを作成しています。

<cfif len(LOCAL.Search.s_artikelbezeichnung) GT 0>
    <cfloop list="#LOCAL.Search.s_artikelbezeichnung#" delimiters=", " index="terms">
        <cfset variables.searchTerms = variables.searchTerms & terms & '|'>;
    </cfloop>   
    <cfset variables.searchTerms = Left(variables.searchTerms, len(variables.searchTerms)-1)>
</cfif>

これは私に与えるべきです:

 do|you|have|foo|bar    // param_artikelbezeichnung

MySQL では、REGEX を実行しています。

...
AND ( (param_artikelbezeichnung = '') AND (1=1) 
    OR (
        a.artikelbezeichnung REGEXP param_artikelbezeichnung 
        )

私の質問:
変数の前後に引用符 '' を追加する必要がありますか、それともこのように入力できますか? 検索に追加する必要がある動的な基準がたくさんあるので、一般的な情報を探しています。

手伝ってくれてありがとう!

編集
これは私がデータベースから得ているものです:

  a.artikelbezeichnung REGEXP param_artikelbezeichnung 
     >> using foo|bar OK
  a.artikelbezeichnung REGEXP param_artikelbezeichnung
     >> not passing a value > ERROR

したがって、引用符は必要ありませんが、空のフィールドでエラーが発生しないように正規表現に何かを渡す必要があります。この作品のようなものでしょうか:

   AND ( (param_artikelbezeichnung = '') AND (0=1) 
      OR (  a.artikelbezeichnung REGEXP param_artikelbezeichnung )

ほとんど別の質問です。回答ありがとうございます!

4

2 に答える 2

1

mysql docによると、次のように検索文字列/正規表現を一重引用符で囲む必要があります。

AND ( (param_artikelbezeichnung = '') AND (1=1) 
    OR (
        a.artikelbezeichnung REGEXP 'do|you|have|foo|bar'
        )

そうしないと、mysql で構文エラーが発生します。


アップデート:

あなたはストアドプロシージャにいるので、このようにすることができます。その他の読者向け:param_artikelbezeichnungは、coldfusion によって呼び出されるストアド プロシージャの引数です。

SELECT COUNT(a.id) AS recs, a.artikelnummer, a.nos, a.nos_anzeige
FROM artikel AS a
WHERE a.aktiv = 'ja'
AND a.artikelbezeichnung REGEXP IF(artikelbezeichnung = '', '.', artikelbezeichnung )
于 2012-06-26T08:37:13.400 に答える
0

引用符で囲んでいる場合、エンジンはそれを文字列として扱い、それ以外の場合はその行の値を扱います。

于 2012-06-26T08:29:45.143 に答える