2012-01-30 11 views
1

ユーザーがデータベース内の特定のフィールドを検索できる検索フォームがあります。フィールドが空のままの場合、nullを含むすべてのものと一致する可能性があります。フィールドに何かが入力されている場合は、ワイルドカードを含むそのフィールドに一致する必要があります。Oracle:式と一致し、式がnullの場合は、その列のすべてのレコードを返します。

私はサーバー側の言語としてPHPを使用しています。

検索フィールドが空であれば、PHPを使用してnullには一致しないので、 '%'に変換することはできません。 (where節が$ valueのようなfieldAであると仮定します)。また、 "fieldA like $ value OR fieldA IS NULL"を使用することはできません。これは、一致するすべてのフィールドとnullのフィールドを返すためです。

SQLステートメントでこれには(むしろ単純な方法で)ありますか?現在はPHPでwhere句を作成していますが、面倒です。

答えて

2

あなたが試みているのは、間違った項目がNULL可能性をチェックしているということです。フィールドが空のままの場合

は、あなたはそれがヌルを含むものと一致することができます

WHERE 
    fieldA LIKE $value 
    OR $value IS NULL 
+0

+1ショートカット – Andrew

0

...パラメータがNULL、またはTRUEの場合、フィールドがパラメータと一致した場合に、常にTRUE得るためにレコードが必要です

この場合、where句をすべて一緒に省略しないでください。

case 1: user enters "ABC" 

select * from my_table where fieldA like 'ABC%'; 

case 2: user leaves blank 

select * from my_table; 

ここで、SQLインジェクションに注意してください。

関連する問題