• 締切済み

データベースクエリで任意の値を検索する方法について

データベースクエリについて質問させて頂きます。 下記のようなクエリがあるとして、WHERE句で指定したフィールドを対象に検索処理を行いたいのですが、 その際、フォームに配置されたテキストボックスに任意に入力した値を検索値にしたいのです。 つまり、クエリ中の<変化する値>がそれに当たります。 例えば<変化する値>が任意でなく指定値であれば'%あ%'とした時、あを含むレコードが検索されると思うの ですが、前者はどのような記述をすれば良いのか分かりません。 こういった場合、どのように記述すればよいのかご教授願います。 SELECT Code, MainType, Name, Type1, Type2, Type3, Unit, UnitPrice, Used FROM shizai_master WHERE (Code LIKE '%<変化する値>%') OR (MainType LIKE '%<変化する値>%') OR (Name LIKE '%<変化する値>%') OR (Type1 LIKE '%<変化する値>%') OR (Type2 LIKE '%<変化する値>%') OR (Type3 LIKE '%<変化する値>%')

みんなの回答

noname#246547
noname#246547
回答No.2

フォームから入力された動的な値を使用して、検索したいのですよね? フォームとは何を使用しているか、プログラム言語が何かまったく記述がないので、あいまいな答えですが、 「<変化する値>」の部分を、フォームから取得したデータを保持する変数にして、前後のSQLの部分と文字列として連結して、 ひとつのSQLを生成すればよろしいのではないのでしょうか? "SELECT ~ LIKE ('%" . $formData . "%') or " . "(MainType LIKE('%" . $formData . "%') or " ・・・ 以下省略

  • kouta77
  • ベストアンサー率20% (185/896)
回答No.1

&1 &2 &3 ---- と埋め込んで見ては? 実行すると 1に入る値は? 2に入る値は? 3に入る値は? と聞かれるはずです。 あと、1,2,3 とありますが&以降は任意の文字列でOKです。

関連するQ&A

  • SQLでORを略す方法

    こんにちは、 (SQL server2005環境) ストアドのwhere文なのですが、 codeの条件でtypeが77,88,99のいずれかを検索させたい場合 下記の文になると思いますが、もう少し簡略することは出来ますでしょうか? WHERE TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '77' or TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '88' or TABLE2.[Code] LIKE COALESCE(@Code, TABLE2.[Code], '') and TABLE2.[TYPE] = '99'

  • sjisでのあいまい検索を教えてください

    Postgres8です。 データベースのエンコーディングは【SQL_ASCII】です。 LIKE検索をした場合のSJISの文字化けに対する対処方法を教えてください あいまい検索をしたいのですが、 文字化け対象文字を含む場合、 どのように記述すればいいのですか? select * from aaa where name = 'パソ\コン'; 上記のように完全一致で検索をすると抽出できます。 select * from aaa where name like '%パソ%' 上記のよう指定してlike検索をしても抽出できます。 しかし以下の場合どちらでも抽出できません。 select * from aaa where name like '%パソコ%' select * from aaa where name like '%パソ\コ%' よろしくお願い致します。

  • アクセルでのクエリ

    アクセスで以下のようなクエリを作ったのですが、 もっと簡略化できないでしょうか? SELECT * FROM testTable WHERE colA like "*あ*" OR colA like "*い*" OR colB like "*あ*" OR colB like "*い*" OR colC like "*あ*" OR colC like "*い*" ;

  • 【PHP】複数語検索について

    お世話になります。 PHPにて複数語検索を行いたいのですが、うまく検索できずに困っています。 テーブル名はinformation、 レコード名はnameとして、スペース区切りで検索します。 $st = $db->prepare("SELECT * FROM information"); $where = array(); if($arr['name']){ $name_ary = explode(" ", $name); $name_count = count($name_ary); $where = ""; for( $i = 0; $i < $name_count; $i++ ){ if( $i != 0 ){ $where = ($where . " or"); } $where = $where . " name LIKE '%{$name_ary[$i]}%'"; } } $query= sprintf("SELECT * FROM information WHERE $where"); $st = $db->prepare($query); どなたかご教授いただけないでしょうか? 他の質問など見て真似たり、下記サイトを参考にしたりしているのですが、 うまくいかず困っております。 http://blog.olivesystem.com/824.html 何卒宜しくお願い致します。

    • 締切済み
    • PHP
  • ワイルドカードの検索

    項目に'%'が入力されているデータを抽出したいのですが、 以下のようなSQLだとデータがすべて抽出されていまいます。  SELECT *   FROM t_table  WHERE code_name LIKE '%%%' '%'を検索するにはどうのようにすればいいのでしょうか?

  • シリアライズされた値に対するカラムへの検索方法

    PHPを使ってMysqlDBに入っている値を取得して表示する 表示面のプログラムを作成しております。 下記のようなシリアライズされた値が保管されている項目に対しての 検索条件の記述を現在はLikeを使っております。 FIND_IN_SETのような検索用の関数はございませんでしょうか。 ●検索対象 1269、1260、1254、84 ●シリアライズされた値サンプル a:4:{i:0;s:4:"1269";i:1;s:4:"1260";i:2;s:4:"1254";i:3;s:2:"84";} ●Likeの記述 カラム名 Like "%\"1260\"%" ご教授のほど、よろしくお願いします。

  • 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 ); ?> ここまで↑ どなたかご指摘をお願いします。

  • データベース上の全てのテーブルに対するクエリ

    mySQLでデータベース内の全てのテーブルに対するクエリーに関して質問があります(mySQL 5.5)。 仮に 「ichinensei」というデータベースにテーブル「1_kumi」「2_kumi」「3_kumi」 .....と複数のテーブルがあるとします。 テーブルは全て同じデータ形式で仮に name (char) | weight (int) という名前と体重の情報が登録されているとします。 やりたいことは全てのテーブルに対しweightを検索キーとして該当するレコードのnameをとってくる、という操作です。 weight(体重)が41,42,43,50,51であるレコードの名前を列挙するためには SELECT name FROM (全てのテーブル) WHERE weight IN (41,42,43,50,51) 上記のようなクエリ文が考えられますが(全てのテーブル)に対する検索を1文で済ます方法が分かりません。 実際の作業ではテーブル数が数十個なのでなるべくunionなどを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。 このような場合どのようなクエリ文が使えるのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQL桁指定で値取り出しの簡略化

    現在桁指定での値取り出しはこうやっています。 mysqlテーブルのhogeの中にある1~3桁の値を取り出す。 SELECT hoge FROM mysql WHERE hoge LIKE '_' OR hoge LIKE '__' OR hoge LIKE '___'; これを1~8桁なんてことにすると*8も書くことになります。 何か省略の方法ありましたら御教授下さい。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • LIKE述語/SQLとPHPを使った検索フォーム

    SQLを使って、「名前」(カラム名=name)と「コメント」(カラム名=comment)のテーブルを作りました。 このテーブルに対して、検索フォームを作りました。 このフォームに名前を入力すると、該当する行が検索されるようにしました。 ◆入力フォーム form.php <form action = "kensaku.php" method="post"> 名前:<input type="text" name="name"> <input type="submit" name="submit" value="検索"> </form> ◆検索結果 search.php <?php function connect() { return new PDO("mysql:dbname=★;host=★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' "); $address = $st->fetchAll(); ?> <?php foreach ($table as $g) { ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 14.0.8.0 for Windows"> <p>名前<?php echo $g['name'] ?></p> <p>コメント<?php echo $g['comment'] ?></p> <?php } ?> ここで、該当する文言の一部でも検索できるようにしたいです。 ※例えば、「山田太郎」を検索する場合に「山」だけでも検索できるように。 LIKEを使えばよいかと思い、 $st = $pdo->query("SELECT * FROM table WHERE name='" . $_POST["name"] . "' ");を $st = $pdo->query("SELECT * FROM table WHERE name LIKE='%" . $_POST["name"] . "%' "); と、記述してみましたがだめでした。 どのように記述すればよいか教えていただけないでしょうか。 何卒お願いします。

    • ベストアンサー
    • MySQL