• ベストアンサー

PHPとMySQLでの処理

いつも参考にさせていただいております。 PHPとMySQLでの開発を行なっております。 質問がありますので、ご教授お願いいたします。 <tableA> id | 社名1 | 社名2(複数) | 質問内容 1 | A社 | V社,W社 | 質問内容 2 | B社 | X社,Y社,Z社 | 質問内容 というような、質問の内容のデータが入っております。 <tableB> id | key | 社名2 | 質問回答 1 | 1 | V社 | 質問回答 2 | 1 | W社 | 質問回答 3 | 2 | X社 | 質問回答 4 | 2 | Z社 | 質問回答 というような、質問の回答のデータが入っております。 tableAのid と tabelBのkey が対応しており、MySQLの「using」を 使い、データを取得しています。 上記のようなデータの場合 tabelAのY社は、質問の回答をしていない場合、データの取得ができません。(レコードがないので、当たり前です) この場合、Y社には「質問の回答をしてください」というようなことを したいのですが、どのうようにしたらいいでしょうか?

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

  • ベストアンサー
回答No.2

#1の方の言われるように、一つの列に複数のデータを入れるのはよくないので、TableBにNULLの入ったレコードを入れたほうが <tableA> id | 社名1 | 質問日  | 質問内容 -------------------------------------------------- 1 | A社 | 2005-12-16 | 質問内容 2 | B社 | 2005-12-10 | 質問内容 3 | Y社 | 2005-12-10 | 質問内容 <tableB> id | key | 社名2 | 質問回答 -------------------------------- 1 | 1 | V社 | 質問回答 2 | 1 | W社 | 質問回答 3 | 2 | X社 | 質問回答 4 | 2 | Z社 | 質問回答 5 | 3 | Y社 | NULL TableAの社名2が複数になるときには、別テーブルを作って,管理を行ったほうがよいと思われます。 ><tableB>に100個の空のレコードができることになるので・・・ いずれ埋まるものなら、あらかじめ用意しておいても無駄にはならないと思います。

wonder_dct
質問者

補足

hegemonism様ありがとうございます。 > いずれ埋まるものなら、あらかじめ用意しておいても無駄にはならないと思います。 埋まらない可能性もある場合でも、そのようにしたほうがよろしいでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • SHlVA
  • ベストアンサー率48% (20/41)
回答No.4

私も#1,2さんのおっしゃるように質問した際に、テーブルBに回答用レコードを会社数分追加しておくのがいいかと思います。 このシステムに回答期限があるかわかりませんが、あるならば、期限が来ても回答がないレコードは削除する、などすればムダなレコードは増えないと思います。 考え方を変えれば、NULLも「無回答」という回答である、とも受け取れますよね。

wonder_dct
質問者

お礼

SHlVA様 ご回答ありがとうございます。 皆様のご教授のように、データベースの設計を見直して 考え直したいと思います。 皆様本当にありがとうございました。

すると、全ての回答が全文表示されます。
回答No.3

#1回答者です。 tableAの社名2に100件の会社名が入るというのは、 稀なケースでは? tableBにnullで予め登録しておいて、最終的に すべての行に有効なデータが入らないということも 稀では? tableAの最大のデータ件数は、どのくらいでしょう か? 質問者さんは、極めて稀な状況を気にし過ぎて、 扱いにくいDBを作ってしまっているように感じます。

wonder_dct
質問者

補足

chukenkenkou様 ご回答ありがとうございます。 100件は稀かもしれませが、50件ぐらいだったらよくあると思います。 それでもやはり、tableBにNULLを登録しといて という皆様のやり方が、よさそうに思います。 最終的にデータが入らないことは、稀ではないと思います。 > tableAの最大のデータ件数は、どのくらいでしょうか? どれぐらいのデータ件数になるかはまだなんとも言えません。 すみません・・・

すると、全ての回答が全文表示されます。
回答No.1

MySQLのバージョンは? tableAに社名2の列は必要ですか? tableBにY社の登録も行い、質問回答をNULLで入れて 置けばNULL値の有無を判定するだけで実現できますが? 一つの列に複数のデータを入れるのは、DB設計として 問題があります。

wonder_dct
質問者

補足

ご回答ありがとうございます。 MySQLのバージョンは、3.23.56 です。 > tableAに社名2の列は必要ですか? はい。必要です。 chukenkenkou様のようなことも考えたのですが、 もし、<tableA>の「社名2」に100個の社名が入っていたら <tableB>に100個の空のレコードができることになるので それは、あまりよくないと思い 現在のようなテーブル構造にいたしました。

すると、全ての回答が全文表示されます。

関連するQ&A