1

フィールドの1つに$Especialidad変数に含まれる特定の単語があるかどうかをMySQLに尋ねています。その単語がいくつかの変数の1つに含まれているかどうかを尋ねています。次のコードがありますが、その部分は機能しません。

SELECT *
FROM   wp_consultte
WHERE  genero = '$Sexo'
        OR estadocivil = '$Civil'
           AND ( opc = '$Especialidad'
                  OR opd = '$Especialidad'
                  OR osp = '$Especialidad'
                  OR comisiones = '$Especialidad'
                  OR regulaciones = '$Especialidad'
                  OR programas = '$Especialidad'
                  OR regimenes = '$Especialidad'
                  OR ordenamiento = '$Especialidad'
                  OR negociadores = '$Especialidad'
                  OR logistica = '$Especialidad' ) 

ありがとう

4

1 に答える 1

1

「逆」IN句を使用します。

SELECT *
FROM   wp_consultte
WHERE  genero = '$Sexo'
OR estadocivil = '$Civil'
AND '$Especialidad' in (opc, opd, osp, comisiones, ...)

いずれかの列が null 可能である場合は、それらの列をラップifnull(col,'')して、リストに null 値がないようにする必要があることに注意してください。そうしないと、一致が得られません (これは SQL のしくみです)。


OR注:ブラケットなしで 使用する場合は注意してください。ANDが優先され、括弧なしで条件を誤ってコーディングするのは簡単です。

編集:

LIKE完全一致の代わりに使用する場合は、次のようにします。

WHERE concat(opc, opd, osp, comisiones, ...) LIKE concat('%','$Especialidad','%')

これにより、変数は、文字列のどこにでも一致する自由形式のようなパターンに変わります。完全に厳密にするには、列の間にスペーサー文字を挿入する必要があります。そうしないと、列の終わりから次の列の始まりまでの交差に一致する可能性があります。

于 2012-11-01T19:21:06.043 に答える