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

質問

QNo.2618606 複数テーブルからの表示データ絞込み
質問者:hepin 質問です
LINUX,PHP4,MySQL3の環境です。

用意したテーブル

個人情報テーブル
→ID
→名前

地域情報テーブル
→ID
→名前

個人+地域情報関連付けテーブル
→ID
→個人TableID
→地域TableID

というDBを設計しました
問題は個人情報と地域情報を関連付けるテーブルへとデータを入力するフォームなのですが
ブラウザ上で、登録された(別途地域登録フォームなどより)地域を地域情報テーブルより引き出し表示させ
その中から選択された地域より今度は個人情報を引き出し表示させ
関連付けされたテーブルへと登録するような流れです
この時、フォームのCheckboxで複数の個人情報を選択できる形のフォームを作成しました
選択できるCheckboxはは個人情報テーブルより個人情報をループ処理によって出力しています

この時、既に個人+地域情報関連付けテーブルへ登録されている個人情報+地域情報をチェックボックスのループ処理に反映されないようにしたいのですが
どのような方法がありますでしょうか?
色々なSELECT文を試してループ処理をさせていたのですがなかなかうまくいきません。
具体的には、結局全種類もしくは同じ個人情報が複数個ループされたりします・・・

ループ処理はSELECT文から関連付けテーブル>各情報テーブルと3つのテーブルから引用して必要なIDと名前を条件付で選びました
条件はいろいろなものを試したのですがどれもうまくいきません

ループ処理でのPHP部分も含めて可能な方法を教えてもらいたいです

よろしくおねがいします!
困り度:
  • すぐに回答を!
質問投稿日時:
06/12/22 12:41
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

ANo.2 処理概要の件は了解しました。
/*** MySQL テーブル定義 ***/
1.個人+地域情報関連付けテーブルは不要と思います。
2.個人情報テーブルのレイアウト変更
→個人ID ---(主キー)
→個人名
→地域ID
3.地域情報テーブルのレイアウト現状のまま
→地域ID ---(主キー)
→地域名
/*** PHP コーディング ***/
1.地域情報テーブル を全件読み込む。
SELECT * FROM 地域情報;
2.地域と関連付けされていない個人情報テーブルを全件読み込む。
SELECT * FROM 個人情報 WHERE 地域ID = '';
3.選択された地域をチェックされている個人分関連付ける。
UPDATE 個人情報 SET 地域ID = 選択された地域ID WHERE 個人ID IN ('...','...');
回答者:Hardking
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
06/12/27 17:00
この回答への補足回答ありがとうございます。
テーブルのレイアウトを変更する方法も考えたのですが
一つの個人情報に複数の地域が入る可能性があるので
正規化の観点から別々のテーブルへと設計しました
PHPの処理で既に登録されているかどうかを判断する事はできたので、表示しない事もできるのですが、できればSQL一つでやりたいなーというのが本音です
JOINっていまいち使いづらいですね・・・
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 まずは、入力画面で行うの処理概要を確認させてください。

別途機能で事前データ登録されている
2つのマスタテーブル(個人情報、地域情報)を参照し
地域情報との関連付けが無い個人分に対して地域情報
との関連付けを行う。
ということでいいですか?
回答者:Hardking
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
06/12/27 10:21
この回答への補足返信ありがとうございます
説明不足で申し訳ありません
処理に関してはその通りです。

相変わらずMySQL3での解決策は見当たりませんが、サブクエリが必要そうだなと感じてきました
もしくはPHPでの制御でしょうか・・・
何か良い方法があればご指南願います
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示