- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:一方のテーブルではカラム名として、もう一方ではカラムの値として使われている)
PHPでテーブルの結合とSELECT文を使ったデータ取得方法
このQ&Aのポイント
- PHPでテーブルの結合とSELECT文を駆使して、太郎君の購入したoptionの価格を取得する方法について教えてください。テーブル1ではカラム名として、テーブル2ではカラムの値として使われています。
- テーブル1とテーブル2を結合し、テーブル1のoption値に対応する価格を取得して、太郎君のIDとoption価格(の合計)を取得したいです。たとえば、太郎君がoption1を購入している場合、option価格はtable2から取得し、太郎君のIDとoption価格を取得します。
- SQLに関しては素人同然で検索の方法も分からないため、PHPでテーブルの結合とSELECT文を使ったデータ取得方法について詳しく教えていただけますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
table1とtable2の対応付けは、opidと同じ値をtable1に持つことで行いましょう。 オプションの種類は、今後、増えることも考えられるのでは? そう考えると、table1に、各オプションに対応する列を持つのはやめましょう。
お礼
chukenkenkouさん、お礼のお返事が送れて申し訳ありませんでした。そして、回答ありがとうございます。 はい、確かにこの2つには対応する値が存在しないので、本来はchukenkenkouさんのおっしゃるとおり、opidをtable1にも持たせるべきなのですよね。 説明不足で申し訳なかったのですが、今回の状況では、自分の立場で勝手にDBの内容を変更することが出来ないのです。本当になんでこんな扱いにくいテーブル構造にしてあるのか自分でも疑問なのですが・・。とにかくそういうことが原因で、このテーブルの状況から何とかしなければならない状況でした。 ちなみに、CASE式を使うことで自分なりにも解決策を見出してみました。他にも同様の苦労をされてる方がいるかもしれないので、一応そのSQL文を掲載して、この質問に対する回答を締め切らせていただこうと思います。chukenkenkouさん、本当にお忙しいところ時間を割いていただきありがとうございました。改めて御礼申し上げます。 ↓これがそのSQL文です。 select id, (case when option1='1' then (select op_charge from table2 where op_name='option1') else '0' end) + (case when option2='1' then (select op_charge from table2 where op_name='option2') else '0' end) + (case when option3='1' then (select op_charge from table2 where op_name='option3') else '0' end) from table1;