
現在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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- フリーソフト grep検索では 1 2022/11/01 19:26
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LIKEは類似一致検索なのでしょ...
-
PL/SQLでの文字列比較
-
複数カラムに対するLIKE文の最適化
-
Access & ADOで「'」のLIKE検索
-
SELECT文で、指定カラム以外の...
-
MYSQLで全てのカラムから検索す...
-
group byで最後のレコードを抽...
-
一部のカラムでdistinctし全て...
-
SQLでカラムを追加し、条件に合...
-
連番を振る インデックス 付...
-
DBの定義のサイズを大きくし過...
-
SQLの範囲指定検索の質問です。
-
特殊な選択をWHEREで選択するに...
-
MySQLのインデックスについて
-
重複を除いた結果が欲しい
-
欠番の取得方法
-
DB2のBLOB型カラムに格納された...
-
自分自身のテーブルを参照して更新
-
GREATESTで NULLをスルーする方...
-
AUTO_INCREMENTの空きデータ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LIKEの右側にカラムを指定でき...
-
複数カラムに対するLIKE文の最適化
-
mysqlで50音順にorder byしたい。
-
スペースによる絞り込み検索をS...
-
複数キーワードを複数カラムに...
-
End Ifに対応するIfブロックが...
-
PL/SQLでの文字列比較
-
whereで全てを検索する方法
-
SQLステータス:37000について
-
WHERE `年月日` = '晴' OR `年...
-
Access & ADOで「'」のLIKE検索
-
MySQLのあいまい検索について
-
LIKEは類似一致検索なのでしょ...
-
直角三角形でもM、NはOと一致し...
-
LIKE演算子の%について教えて...
-
複数の条件での絞り込み検索の仕方
-
前と後という言葉の意味
-
ORDER BY CASEで異なる並替え...
-
私は相手の言葉と行動が一致し...
-
場合の数 中学入試 5枚のカード
おすすめ情報