配列に指定した値が含まれているものを抽出する方法

このQ&Aのポイント
  • SQLのテーブルに配列のフィールドがあり、指定した値が含まれているものを抽出する方法を質問します。
  • 具体的には、配列のフィールドに1, 2, 6のいずれかが含まれている場合表示対象となるSQL文を書きたいです。
  • また、array[]フィールドの中に2(指定した数値が1つだけ)を探す方法も知りたいです。
回答を見る
  • ベストアンサー

配列に指定した値が含まれているものを抽出する方法

こんにちは。 いつもお世話になっております。 SQLにて、配列のフィールドに指定した値が含まれているものを抽出する方法を質問致します。 SQLのテーブル(テーブル名:data)に配列のフィールド(フィールド名:array[])があるとします。 Array[]フィールドの中に、1, 2, 6のいずれかが含まれている場合表示対象となるSQL文を書くには、どのように書けばよいですか。PostgreでSQL文を書くとします。 実現したい動作は以下の通りです。 array[] の値 {1,3,5} 表示対象になる {3,8,9,10}  表示対象にならない {2,6} 表示対象になる 以上よろしくお願い致します。 ちなみに、array[]フィールドの中に、2(指定した数値が1つだけ)を探すとき、 select * from data where 2=any (array); とすればいいことは確認できました。

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

  • ベストアンサー
  • gacky-79
  • ベストアンサー率100% (14/14)
回答No.1

&& 演算子 (重複する, 共通要素を持つ) を使います。 SELECT * FROM (VALUES (ARRAY[1,3,5]), (ARRAY[3,8,9,10]), (ARRAY[2,6]) ) T(arr) WHERE ARRAY[1,2,6] && arr;

参考URL:
http://www.postgresql.jp/document/current/html/functions-array.html
moto_k22
質問者

お礼

ご回答ありがとうございます。 &&演算子は知りませんでしたので、勉強になりました。

関連するQ&A

  • 配列に値が入らない

    PHP初心者です。 <?php $sql = sprintf('SELECT * FROM image WHERE img_url="%s"', mysql_real_escape_string('img_url') ); $record = mysql_query($sql)or die(mysql_error()); while($data = mysql_fetch_assoc($record)) { $image = array($data['img_url']); } ?> これで $image にはデータベースの img_url のフィールドの値がすべて代入されるはずだったのですが なぜか配列には何も値が入りません。 何が悪いのか、配列についていろいろ調べてはみたのですが、どうしてもわかりませんでした。 どうやったら値が入るようになるか、教えていただけないでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • 配列へのデータセット方法

    AテーブルのnameフィールドをMySQLのSELECT文で読込み、結果のnameフィールドを配列$arynameにセットしたいとおもいます。 配列の結果は、 array([0]=>aaa [1]=>abc [2]=>def [3]=>ggg) となる様にしたいのですが、結果が上手くいきませんでした。 教えてください。 $sql1="SELECT name FROM `A`"; $db->query($sql1); $cnt=1; while($db->next_record()){ $name=$db->f("name"); $aryname=array($name); $cnt++; }

    • 締切済み
    • PHP
  • 配列で指定した値のみをMySQLからループで呼び出す方法

    MySQLから呼び出す際の下記のような書式を簡略化したいと思っています。 $test = $row['test']; アドバイスのほどよろしくお願いいたします。 /* 以下ソース */ $field =array('a','b','c','d','e','f'); function ROW_DATA(){ grobal $field; foreach($field as $key => $val){ return $key = $row['$key']; } } $sql = "SELECT * FROM data"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { ROW_DATA(); }

    • ベストアンサー
    • PHP
  • SQLにあるデータをWEB画面に出力するときに、フィールドの値を編集して表示させたい

    SQLにあるデータをWEB画面に出力するときに、 フィールドの値を編集して出力したいと考えています。 具体的には、フィールドの値が5~10桁の数字で、 WEB画面には下3桁目に「-]を入れたいと考えています。 例(1)SQLの番号フィールドの値:123456 WEB表示:1234-56 例(2)SQLの番号フィールドの値:12345 WEB表示:123-45 どうぞ宜しくお願い致します。 ****************************************************** 作成したPHP 番号フィールドの値を編集して表示したい ****************************************************** <?php $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); $sql = "select 氏名, 住所, 番号 from テーブル名 $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<table><tr><td>"); print "".$array["番号"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["氏名"].""; print("</td></td></table>"); } mssql_close($cont); ?>

    • ベストアンサー
    • PHP
  • 配列操作

    SQLで取得した配列データを新たな配列に作り直したいのですがやり方がわかりません。おしえてください。 取得される配列例です。 $Array[i][日付][タイプ][個数][タイプ別レコード数] ↓ $Array[0][0901][1][3][2] $Array[1][0901][2][4][2] $Array[2][0901][3][5][2] $Array[3][0902][1][5][2] $Array[4][0902][2][10][2] $Array[5][0902][3][7][2] この配列を日付が同じものだけ1レコードに作りなおしたいのですがどのようにすればいいでしょうか。 期待する配列例 $Table[i][日付][タイプ1個数][タイプ2個数][タイプ3個数][レコード数] ↓ $Table[0][0901][3][4][5][6] $Table[1][0902][5][10][7][6] よろしくお願いします。

    • 締切済み
    • PHP
  • 配列に新しい値を加える

    配列に新しい値を加えようとしているのですが、どうもうまくいってくれません。array_push を使用してもうまくいかないのでどうしたものかと悩んでいます。 $fruits = "banana melon orange strawberry"; $fruits = explode (' ', $fruits); $fruits = array_push ($fruits, "apple"); print_r($fruits); とすると 5 が表示されます。一方3行目を消すと Array ( [0] => banana [1] => melon [2] => orange [3] => strawberry ) が表示されます。 配列に新しい値を加えるやり方をご存知の方おられましたらご教授くださるとうれしく思います。

    • ベストアンサー
    • PHP
  • セレクト文について

    sqlのセレクト文について質問させて下さい。 フィールドのレコードに、a,b,c,d,eと登録されているデータから、"c"のデータだけをセレクト対象にしたい場合、どのようにsqlを書けばよいのでしょうか? 通常のセレクト文だと、WHERE句に、(フィールド名 = '値')などで格納されている値とデータの比較ができるかと思うのですが、上記のような場合はどのように指定するのでしょうか? フィールドを無駄に増やし過ぎないよう、カテゴリごとに配列をjoinでまとめたものをDBへ登録しているのですが、この場合だとイメージしているようなことは無理なんでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 配列に格納した値が保存されない

    DB(Access)から取得した内容を配列に格納し、その内容を取り出すプログラムを 以下のように書いてみました。 whileループ内の alert("ループの中=" + data_array[i]); では配列の中の値が参照できるのですが whileループの外で for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } 配列の中身を表示させようとしたところdata_array.length の長さが0になっており 配列の中身が参照できない状態です。なにが原因かわかりますでしょうか。 <html> <script language="javascript" type="text/javascript"> function dbSearch() { var sql="select * from URL where flg=0"; var database = dbConnect(); var recordSet = database.Execute(sql); var data_array = new Array(); while (!recordSet.EOF){ data_array[i] = recordSet(0); alert("ループの中=" + data_array[i]); recordSet.MoveNext(); } alert("長さ=" + data_array.length); for(var i=0;i < data_array.length; i++){ alert("ループの外:" + data_array[i]); } database.Close(); return; } //データベースに接続 function dbConnect() { var database = new ActiveXObject("ADODB.Connection"); database.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\\test.mdb;"); return database; } </script> <body> <input type="button" value="DB接続" onclick="dbSearch()"> </body> </html>

  • 連想配列からの値の取り出し

    お世話様です。 タイトルにもありますが連想配列を作成した後(以下に記述例)に その配列からキーを指定して値を取得したいと思っております。 array_keys関数だと値を指定してキーを取得するみたいで うまくいきませんでした。 何かよい方法ありませんでしょうか? //配列に格納 while (条件) {   $aParaOra += array((キー) => (値)); }

    • ベストアンサー
    • PHP
  • 配列内の値を分解して再格納

    配列の中で「~」が含まれている値の「~」を取って 別々の値として格納するにはどうすれば良いでしょうか。 例 array(1,4,5~7,3~4,2)⇒array(1,4,5,7,3,4,2)

    • ベストアンサー
    • PHP