ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.2940474 select文のwhere句に配列を入れて検索したいのです。
質問者:kappa_chan はじめまして。php5とpostgresを使って、ブラウザで都道府県をセレクトで複数選択(prefecture[])して、postgresに
select city from city_table where p_id='prefecture';
としているのですが、結果を出力できません。

print_rで見たところprefectureに複数選択した都道府県のidが配列として入っていることは確認しております。

where句に配列を入れて検索するにはどうすれば良いのでしょうか?
よろしくお願いいたします。
困り度:
  • すぐに回答を!
質問投稿日時:
07/04/22 09:37
この質問に対する回答は締め切られました。

回答

ANo.4 まあ、SQLでやるならの例を示しましたが、No3さんの指摘どおり複数選択(prefecture[])したSQLが複雑で、SQLが長くなる、1行じゃどうにもならない(prefecture[]の作り方によります。)等の弊害があるのであれば、prefectureした結果を配列に格納してそれを元に動的SQLを作成する方法は有ります。

ケースバイケースですね。
回答者:t_nojiri
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/04/23 09:37
この回答への補足動的SQLをググってみました。
書店に行って記述のある本も探してみましたが・・・

私には難しすぎます(泣

難度の高すぎることをしようとしているのでしょうか。。。
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.3 DB上は単純な構造(配列でない)の列で、アプリケーション中は配列ということですよね?

複数のRDBMSの使用経験があり、いくつかのRDBMSでは専門的な知識を持っていますが、アプリケーション中の配列の各要素を取り出して、DB上の列と条件を評価するといったことをサポートしているRDBMSは、私の知る限りは存在しませんが?
回答者:chukenkenkou
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/04/22 22:29
この回答への補足アドバイスありがとうございます。

例えば、カーセンサー(​http://www.carsensor.net/​)を見ると車のタイプ・特徴から選ぶでname="BLST[]"に複数のvalueが渡されています。

配列の中の要素を取り出してselectする方法なら可能のように思えるのです。

追記
作りたいアプリケーションは不動産情報(​http://www.athome.co.jp/Haht_atweb/hsrun.exe/atweb2/athomeweb/athom...​)のようなものです。
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答10pt

ANo.2 副問い合わせ使いましょう。
http://jibun.atmarkit.co.jp/lskill01/rensai/bronzesql09/bronzesql01...
回答者:t_nojiri
種類:アドバイス
どんな人:専門家
自信:自信あり
回答日時:
07/04/22 09:47
この回答への補足参考になるサイトのご紹介ありがとうございます。
早速、勉強させていただきます。
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答20pt

ANo.1 WHERE句の書き方が違うと思います。
複数の条件であれば = ではなく、IN を使います。
  WHERE p_id IN (条件1, 条件2, …)
回答者:Kazamin
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/04/22 09:39
この回答への補足ご回答ありがとうございます。
さっそく試してみたのですが、やはりselectしません。

ちなみにp_idを配列(p_id[])ではなく、要素(p_id)としてhtmlで受け取るとselectします。

どうもwhere p_id =ではなくwhere p_id INとしても配列の中の要素が取り出されてないように感じるのですが。。。

phpでforeachとかarray_mapなども使ってみてるのですが、うまくいかない状況です(泣
この回答へのお礼この回答にお礼をつける(質問者のみ)