- PR -

検索条件設定後のSQL Select文発行に関して

1
投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-11-06 18:16
いつもお世話になっております。

現在、ASP(ASP.Netではありません)にてWebアプリの修正をしておりますが、
ある画面上に、検索条件としての項目で、テキストボックスやチェックボックス
などを配置しており、これらを元に、Select文にて結果を表示させたいと思って
います。(DBはoracleです。)

例えば、画面上に、テキストボックスが一つ、チェックボックスが2つある
場合で、テキストボックスに'TEST'、チェックボックス両方共にチェックがされて
いる場合、

Select aaa,bbb,ccc from table where textbox = 'TEST' and check1 = '1' and
check2 = '1'

というようなSQLで検索したいと思います。

こういった場合、やはり、検索項目のすべてのケースにてWHERE以下を設定しなければ
ならないのでしょうか?(当たり前のような質問で申し訳ないのですが・・・)


where以下がtextbox = 'TEST' and check1 is null and check2 = '1'の場合などなど。


検索項目が少ない場合は、特に問題ないと思うんですが、多い場合などを考えて
何かスマートな方法を知っている方おられましたら、アドバイスお願いします。



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-06 19:35
引用:

鼻セレブさんの書き込み (2006-11-06 18:16) より:

こういった場合、やはり、検索項目のすべてのケースにてWHERE以下を設定しなければ
ならないのでしょうか?(当たり前のような質問で申し訳ないのですが・・・)


すみません、ちょっと意味がわからなかったです。
検索条件が設定されていないものは、WHERE に何も書かなければ良いだけなのではないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-11-06 19:48
 where以下を設定するかどうかは、どのようなSQL文を期待しているかで変わってくるのではないでしょうか?


 私もこのような処理を書いたことがありますが、その場合はテキストボックスに何も文字列がない場合は、Where句にはセットしないようにしたりしました。(このときはTextBoxに何もかかれていない場合はWhere句にセットする必要がないSELECT文で問題なかったからです。場合によっては必要なこともあるでしょう)

 if ( textBox1.text.Length > 0 )
strWhere += "textBox='" + textBox1.Text + "'";

みたいな感じです。

_________________
--------------------------------------------
HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています
HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-06 22:16
レガシー ASP はほとんど触ったことは無いのですが、
僕は動的にSQLが変わるのがいやなので、
WHEREはすべて記述して固定で SQL + Parameter で問い合わせを作ります。
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-11-06 22:30
かるあさん、HIROさん、じゃんぬねっとさん

ご返答ありがとうございました。

単純に私が思っていたことは、例えば、検索項目の条件として、
チェックボックスが5個くらい合った場合などを想定すると、
当然ながらチェックボックスは、チェックあり、なしの時がありますので、
これを1から5に割り振ると、

CASE1
check1あり、check2以降は無し・・・
where check1 = '1'

case2
check1あり、check2あり、check3以降は無し・・・
where check1 = '1' AND CHECK2 = '1'

CASE3
CHECK1あり、CHECK2なし、CHECK3あり、CHECK4以降は無し
WHERE CHECK1 = '1' AND CHECK3 = '1' AND CHECK4 = '1'

という風に、すべての場合分けをwHERE句に羅列していくのかなって
思いまして・・・。


かるあさん、
レガシー ASP はほとんど触ったことは無いのですが、
僕は動的にSQLが変わるのがいやなので、
WHEREはすべて記述して固定で SQL + Parameter で問い合わせを作ります。

→具体的に教えて頂けますか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-06 22:38
引用:

鼻セレブさんの書き込み (2006-11-06 22:30) より:

CASE3
CHECK1あり、CHECK2なし、CHECK3あり、CHECK4以降は無し
WHERE CHECK1 = '1' AND CHECK3 = '1' AND CHECK4 = '1'


以前このスレッドを見てからこの記述になることが多いです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32164&forum=7

とりあえず一番長いところで、
コード:

where check1 = nvl(:value1, check1)
and check2 = nvl(:value2, check2)
and check3 = nvl(:value3, check3)
and check4 = nvl(:value4, check4)



#編集
うぁ、顔文字になってる。。。orz
_________________
かるあ のメモ
http://karua.at.webry.info/

[ メッセージ編集済み 編集者: かるあ 編集日時 2006-11-06 22:39 ]
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-11-06 23:08
引用:

単純に私が思っていたことは、例えば、検索項目の条件として、
チェックボックスが5個くらい合った場合などを想定すると、
当然ながらチェックボックスは、チェックあり、なしの時がありますので、
これを1から5に割り振ると、

CASE1
check1あり、check2以降は無し・・・
where check1 = '1'

case2
check1あり、check2あり、check3以降は無し・・・
where check1 = '1' AND CHECK2 = '1'

CASE3
CHECK1あり、CHECK2なし、CHECK3あり、CHECK4以降は無し
WHERE CHECK1 = '1' AND CHECK3 = '1' AND CHECK4 = '1'

という風に、すべての場合分けをwHERE句に羅列していくのかなって
思いまして・・・。



oracleならallを使うが吉
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-11-07 11:37
ご返答頂きました皆様、
色々とアドバイス有難うございました。

とりあえず、項目分のIFを用意して、最後に余計な'and'を取り除いて
対応することにしました。

具体的には、

If xxx1 <> "" then
strWhere = "xxx1 = '0' and"
End If

If xxx2 <> "" Then
strWhere = strWhere & "xxx2 = '1' and"
End If

このように項目分用意して、最後のandが付くのでこれを取り除いた次第です。


しかし、色々なやり方も教えていただき大変勉強になりました。
ありがとうございました。




1

スキルアップ/キャリアアップ(JOB@IT)