• ベストアンサー

NULLで検索を行ったときは全件表示させたい

VWD2008で簡単なDB検索アプリケーションを作成しています。 ページ内に Textboxコントロール(Textbox1)とButtonコントロール GridViewコントロール(GridView1)を配置しています。 データベース列の要素は id(番号) name(商品名) value(数量) として、テーブルの内容には下記内容が入力されています。 ------------------------- id    name   value 1    AAAA   1 2    AAAB   2 3    DDDD   3 -------------------------- テキストボックスに商品名を入力して、該当する商品だけを抽出させるのですが テキストボックスに何も入力せずに検索ボタンを押したときは すべてのDBの内容を表示させたいのです。 今のところ何も入力せずに検索しなかった場合はGridView上には 何も結果が出力されません。 GridViewのデータソースの構成によりWhere句の追加で 列:name 演算子:LIKE ソース:Control パラメータのプロパティ:TextBox1 規定値:何も入力せず(NULL?) と入力して追加ボタンを押すと以下のWHERE句が追加されました。 SELECT id, name, value FROM Table1 WHERE    ([name] LIKE '%' + @name + '%')) NULLで検索を行った場合に全件表示させたい場合 WHERE句はどのように設定するのが好ましいのでしょうか・・・、、 初歩的な質問で大変申し訳ありませんが教えてください。困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

DBが何かわかりませんが、SQL Server 2005で試したところ、 SELECT * FROM テーブル名 WHERE カラム名 LIKE '%%' というSQL文で実行すると全レコードを引っ張ってきたのでいけるかと思いますが、エラーが出たのでしょうか?

masaxy
質問者

補足

回答ありがとうございます。 このSQL文だと確かに全レコードは引っ張ってこれますが テキストボックスに入力した検索ワードに応じて 表示レコードを反映させることができないんです・・。

その他の回答 (1)

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.2

データソースコントロールに、データをセレクトする前のイベントがあるはずです。そこで値を変えるかなにかしてはどうでしょうか。

関連するQ&A

  • 指定値を否定した条件で、NULLも含めた指定値以外を取得

    指定値を否定した条件で、NULLも含めた指定値以外を取得できる方法はありますでしょうか。 使用DBはMYSQLです。 test_table ID,name,value ----------- 1,aaa,100 2,bbb,NULL 3,ccc,300 4,ddd,100 5,eee,NULL SELECT * FROM test_table WHERE value = 100; valueが100のもの、ID:1,2を取得していたのですが、 100以外のものを取得する必要がでてきました。 SELECT * FROM test_table WHERE NOT(value = 100); こうすると、ID:3しか返ってきません。 valueがNULLのものも含めて取得したいのです。 NULLの値があることを考慮すれば、以下のような形で取得はできるのですが、 SELECT * FROM test_table WHERE NOT(value = 100) AND value IS NULL; value = 100という条件に、NOTをつけるかつけないかのような簡単な方法でNULLまで取得したいのです。 実はコーディング中に悩んでいるのですが、 動的ページなため、WHERE条件が定まらないのとかなりの数になります。 当初の予定では、全ての条件を()で囲んでNOTをつけるだけにするつもりでした。 これができないとなると、一つ一つ条件を見てNOTを付加+IS NULLの条件追加をしないといけなくなりそうです。 なにか良い方法がありましたらご教授願います。

    • ベストアンサー
    • MySQL
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • エラ-9 ” Null値が不正です!! ”の解消方法は?

    Private Sub ComboBox1_Change() Dim db As Database Dim Tname As Recordset Set db = OpenDatabase("c:\Sam1.mdb ", True) Set Tname = db.OpenRecordset("Table1", dbOpenTable) N = ComboBox1.ListIndex Tname.Move N TextBox1.Text = Tname.Fields(0).Value TextBox2.Text = Tname.Fields(1).Value TextBox3.Text = Tname.Fields(2).Value Tname.Close db.Close Set Tname = Nothing Set db = Nothing End Sub エクセルよりmdbファイルを開けて、ComboBoxのリストインデクッス番号 値とmdbのレコ-ド数値が合致することから、各フィ-ルドの値をTextBox に返すプログラムを作りました。デ-タが各フィ-ルドに存在する時はう まくいくのですが、空の時(Null値の時)は”Null値が不正です!!”とい うエラ-がでて止まってしまいます。Null値はNull値として、TextBoxに 返したいのですが、どうすればよいでしょうか?

  • PHPの複数条件検索フォーム

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1134440526 の回答者の方のコードを参考にしたのですが、下記の通りにすると Parse error: syntax error, unexpected '{' in C:\Program Files\Apache\Apache24\htdocs\sample\kensaku20.php on line 19 と出ます、カッコの数がおかしいのでしょうか? 19行目前後を見てもおかしな所はないと思われるのです(秀丸を使っていてカーソルを合わせると色が変わる部分を見ました) やりたいこととしてはid名か商品名のどちらか・或いは両方とも入力したらDBより検索、表示させる事です。 HTML部 <form action ="http://localhost/sample/kensaku20.php" method="post"> id名:<input type="text" name="id"> 商品名:<input type="text" name="name"> <input type="submit" name="exec" value="検索"> </form> php部 中略 $ary_whr = array(); $ary_dat = array(); if (!empty($_POST['exec'])) __{ $ary_whr[] = 'name LIKE ? '; $ary_dat[] = '%'.$_POST['exec'].'%';} if (!empty($_POST['id'])) __{ $ary_whr[] = 'id LIKE ? '; $ary_dat[] = '%'.$_POST['id'].'%';} if (!empty($_POST['name'])) __{ $ary_whr[] = 'name LIKE ? '; $ary_dat[] = '%'.$_POST['name'].'%';} $where = ' WHERE ' . implode(' AND ', $ary_whr); 中略

    • ベストアンサー
    • PHP
  • 紐付いている3つのテーブルに対しての検索条件の指定がうまくいきません・・。

    紐付いている3つのテーブルに対しての検索条件の指定がうまく書けません。 3つのテーブルが紐付いています。 ・main_tableのIDと、note_id_tableのID ・note_id_tableのnote_IDと、note_value_tableのnote_ID main_table ID, name ----------- 1, aaa 2, bbb 3, ccc 4, ddd 5, eee note_id_table ID, note_ID ----------- 1, 1 1, 2 1, 3 1, 4 3, 5 3, 6 4, 7 4, 8 4, 9 5, 10 note_value_table note_ID, note_value ----------- 1, AAAA1 2, BBBB1 3, CCCC1 4, DDDD1 5, AAAA3 6, EEEE3 7, FFFF4 8, GGGG4 9, HHHH4 10, IIII5 検索の対象にしたいのは、note_valueです。 今まで、「note_valueに検索文字列が含まれている」main_tableのレコードを取得していました。 SELECT main_table.* FROM main_table LEFT JOIN note_id_table ON main_table.id = note_id_table.id LEFT JOIN note_value_table ON note_id_table.note_ID = note_value_table.note_ID WHERE note_value_table.note_value LIKE '%AAA%' 上記クエリだと、note_valueにAAAを含んでいるnote_ID:1,5を持つ、 main_tableのID:1,3のレコード、2件が返ってきます。 これを、検索文字列のNOT検索とAND検索に対応させたいのです。 NOT検索について、 WHERE NOT(note_value_table LIKE '%AAA%') としてみたのですが、main_tableのID:1,3,4,5のレコードが返ってきました。 期待した動作は、main_tableのID:2,4,5でした。 まず、note_value_tableにデータを持っていないmain_table.id:2はNULLのようで、 この条件では無視されてしまうようです。 また、main_table.id:1,3が返ってきてしまうのは、 main_table.id:1に紐付いているnote_IDの内、2,3,4と main_table.id:3に紐付いているnote_IDの内、6に条件が引っかかってしまうようなのです。 AND検索ですが、上記クエリの条件を WHERE note_value_table LIKE '%AAA%' AND note_value_table LIKE '%BBB%' としたところ、0件となってしまいました。 期待した動作は、note_valueにAAAとBBBを含んでいるnote_ID:1を持つ、 main_tableのID:1のレコード、この1件が返ってくることでした。 どうもこの条件だと、一つのnote_valueにAAAとBBBが含まれていないとHITしないようです。 結局JOINしているので、note_valueの数だけ同じmain_tableが前にくっついてるイメージなんですよね。 main_tableのレコード末端に、紐付いているnote_valueのフィールドを横に繋げるか、 紐付いているnote_valueの文字列を連結したものを一つのフィールドとして解釈するようなことができれば 実現できるのかなぁと思いました。 試行錯誤の末に、パフォーマンスが非常に悪いんですが、下記クエリで機能的には実現できたのですが、 これでは使えないので何かいいアイディアなどあればご教授お願いしたいです。 サブクエリを使いたくないというのがあります。 --AAAの検索 JOINする時に検索してしまうようにしてみました。 また、そのためには、note_id_tableからnote_IDを取得できていないとだめなので、 サブクエリ化してみました。 SELECT main_table.* FROM main_table LEFT JOIN note_value_table ON note_value_table.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table LIKE '%AAA%' WHERE note_value_table.note_value IS NOT NULL --AAAのNOT検索 WHERE条件を逆にするだけにしました。 --AAAとBBBの検索 検索条件1つに対して、JOINを増やしていくようにしました。 JOINが増えるのもそうですが、サブクエリも倍になってしまい、 検索条件を増やせば増やすほどパフォーマンスが落ちてしまいます。。 SELECT main_table.* FROM main_table LEFT JOIN note_value_table AS note_value_table1 ON note_value_table1.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table1 LIKE '%AAA%' LEFT JOIN note_value_table AS note_value_table2 ON note_value_table2.note_ID IN (SELECT note_ID FROM note_id_table WHERE main_table.id = note_id_table.id) AND note_value_table2 LIKE '%AAA%' WHERE note_value_table1.note_value IS NOT NULL AND note_value_table2.note_value IS NOT NULL

    • ベストアンサー
    • MySQL
  • LIKE検索の場合うまくいきません

    WEBアプリとSQLServerでSELECTをするときに不正をされないように SELECT * FROM DB WHERE DB.A = 検索文字 を SELECT * FROM DB WHERE DB.A= @A のようにして、@Aを後で指定しますが、 SELECT * FROM DB WHERE LIKE '%検索文字' のようにLIKE検索の場合うまくいきません。 どのように記述したらいいのでしょうか? SELECT * FROM DB WHERE DB.A LIKE @A --> 駄目 SELECT * FROM DB WHERE DB.A LIKE '%@A' --> 駄目

  • 複数条件による検索

    現在strutsを使用した「検索フォーム」を作成しています。 検索項目は6つあり、それぞれNOT NULLの項目と、NULL可の項目が あります。 全部NOT NULLですと、WHERE句で 「WHERE 項目A = '%?%'」 を条件にすればよいと思うのですが、NULL可の場合は 「WHERE 項目B = '%?%' OR 項目 IS NULL 」 となると思います。 しかしこれですと項目Bに検索条件で入力したものと NULL値のものが両方ヒットしてしまいます・・・ うまく文章がまとまらなくてとても恐縮ですが、 うまく構文を作る方法はないでしょうか・・・。 よろしくお願いします。

  • あいまい検索画面を作成したい

    「1.htm」の入力フォームで入力された条件を、 「2.asp」に出力するASPを作成しました。 現状だと、「1.htm」で入力された条件の 完全一致のクエリ結果しか表示されません。 そこで、部分一致でも表示させようと考えています。 「*」を付ければいいのかと思うのですが、うまくいきません。 どうすればいいのでしょうか。 宜しくお願いします。 ***1.htm**** <form method="POST" action="2.asp"> <input name="simei" type="text"> <input type="submit" value="検索"> </form> ***2.asp**** Set rs = db.Execute("SELECT * FROM test WHERE ((test.氏名) Like '" & simei & "')") ↑ここにLikeのところに*をつけたい

  • あいまい検索について

    お世話になっております。 早速ですが、SQLをどう書けばいいかで悩んでおります。 テーブルの文字列(varchar)の列をl検索します。 テーブルA------------------------ ID value 1 abc 2 defghijklmnopqrstu 3 vwxyzabcdefg 上記のようなテーブルです。 このテーブルのvalue列で、以下の文字列をもっともたくさん 含むものから優先で取得したいのです。 "abc"、"fg"、"vw"、"pqr"、"xyz" この場合、 IDが1の列は"abc" IDが2の列は"fg"、"pqr" IDが3の列は"fg"、"abc"、"xyz" のようにそれぞれ1個、2個、3個と含んでいますから。 SQLの結果セットにIDが3,2,1といった順番で含まれるように 取得したいのです。 where句にlikeを使うくらいはわかるのですが、それから先が 思い浮かびません。 どうかお知恵をおかしください。

    • ベストアンサー
    • MySQL
  • sqlite3 検索、一行づつ増やして表示

    sqlite3接続で商品番号と数量を入力して検索表示させ小計を実行するphpで一行表示はOKなのですが、続けて検索させ一行ごと増やしていきたいのですがうまくできません!ご教授お願い致します。 <?php $kazu = $_POST['kazu']; $pdo = new PDO('sqlite:db/syouhin.db'); $st = $pdo->query("SELECT * FROM oder WHERE id='" . $_POST["ban"] . "' "); while ($row = $st->fetch()) { $id = htmlspecialchars($row['id']); $name = htmlspecialchars($row['name']); $kin = htmlspecialchars($row['kin']); $kei = number_format("$kin"*"$kazu"); echo "<tr><td>$id</td><td>$name</td><td>$kazu</td><td>$kin</td><td>$kei</td><tr>"; } sqlite_close; ?>

    • 締切済み
    • PHP

専門家に質問してみよう