
現在strutsを使用した「検索フォーム」を作成しています。
検索項目は6つあり、それぞれNOT NULLの項目と、NULL可の項目が
あります。
全部NOT NULLですと、WHERE句で
「WHERE 項目A = '%?%'」
を条件にすればよいと思うのですが、NULL可の場合は
「WHERE 項目B = '%?%' OR 項目 IS NULL 」
となると思います。
しかしこれですと項目Bに検索条件で入力したものと
NULL値のものが両方ヒットしてしまいます・・・
うまく文章がまとまらなくてとても恐縮ですが、
うまく構文を作る方法はないでしょうか・・・。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
--------------------------
項目A(必須)[ ]
項目B(必須)[ ]
項目C(必須)[ ]
項目D [ ]
項目E [ ]
項目F [ ]
【検索】
--------------------------
↑ [ ]はテキストボックス
↑ 【 】はボタン
たとえば、よくあるこんなフォームで検索するような
検索結果を得るイメージだとして話を進めます。
それぞれのテキストボックスには、項目Aならname="textA"
のように名前が割り当てます。
結果を取得するSQLを作成するときに
sql = ""
sql += ' select* ';
sql += ' fromhoge_table ';
//
//必須入力項目であるA~Bは、必ず検索の対象とする。
//
sql += ' whereCOLUMN_A like \'%' + request.getParameter('textA') + '%\' ';
sql += ' andCOLUMN_B like \'%' + request.getParameter('textB') + '%\' ';
sql += ' andCOLUMN_B like \'%' + request.getParameter('textC') + '%\' ';
//
//入力が必須でないD~Fは、文字の入力があった場合のみ検索条件に含める。
//
if (request.getParameter('textD') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textD') + '%\' ';
}
if (request.getParameter('textE') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textE') + '%\' ';
}
if (request.getParameter('textF') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textF') + '%\' ';
}
とすることで実現できるのではないでしょうか?
もし設定が的外れでしたらすみません。
補足のご説明をお願いします。
ありがとうございます!。
そうですね。必須項目以外は入力があった場合のみ検索の対象に
すればいいんですよね・・・。
その考えがありませんでした。
助かりました、ありがとうございます。
No.1
- 回答日時:
>全部NOT NULLですと、WHERE句で
>「WHERE 項目A = '%?%'」
「=」になっていますが、LIKEをつかうということ?
LIKEで前方後方一致はSQLとしては推奨されません。
「WHERE 項目A != ''」
とかの方がよいのでは?
>NULL可の場合は
>「WHERE 項目B = '%?%' OR 項目 IS NULL 」
>となると思います。
「WHERE 項目B != '' AND 項目 IS NOT NULL 」
的な処理でよいのでは?
場合によってはCOALESCE()で処理する方がいいかも・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Ifに対応するIfブロックが...
-
スペース区切りの検索について
-
他のシートの検索
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
INDIRECT関数の代替方法は?
-
type date にnullをinsert
-
AUTO_INCREMENTに0はダメ?
-
SQLでカラムを追加し、条件に合...
-
DBの定義のサイズを大きくし過...
-
now()かCURRENT_TIMESTAMPか
-
頭に0が付く文字
-
[MySQL]LOAD DATA INFILE一部レ...
-
UNIONする際、片方テーブルしか...
-
ドロップダウンリストの連動し...
-
【SQL】select に ワイルドカー...
-
【Transact-sql】 where条件、i...
-
テーブルの列数を調べたい
-
ホームページを作ろうと思いま...
-
SQLiteで「UPDATE table1 SET c...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スペースによる絞り込み検索をS...
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
whereで全てを検索する方法
-
複数カラムに対するLIKE文の最適化
-
アクセルでのクエリ
-
End Ifに対応するIfブロックが...
-
PL/SQLでの文字列比較
-
Android javaで検索プログラム...
-
SQL文に間違いがありますでしょ...
-
WHERE `年月日` = '晴' OR `年...
-
MySQL 配列もどきを条件式に
-
複数条件による検索
-
SQL文
-
SQLステータス:37000について
-
部分一致検索ができなくて困っ...
-
社名でデータ抽出できる検索シ...
-
複数のフィールドの検索
-
MySQLで複数フィールドから同一...
-
4つのセルの文字列が全て一致...
おすすめ情報