重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

質問です
LINUX,PHP4,MySQL3の環境です。

用意したテーブル

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

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

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

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

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

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

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

よろしくおねがいします!

A 回答 (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 ('...','...');

この回答への補足

回答ありがとうございます。
テーブルのレイアウトを変更する方法も考えたのですが
一つの個人情報に複数の地域が入る可能性があるので
正規化の観点から別々のテーブルへと設計しました
PHPの処理で既に登録されているかどうかを判断する事はできたので、表示しない事もできるのですが、できればSQL一つでやりたいなーというのが本音です
JOINっていまいち使いづらいですね・・・

補足日時:2006/12/28 19:15
    • good
    • 0

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



別途機能で事前データ登録されている
2つのマスタテーブル(個人情報、地域情報)を参照し
地域情報との関連付けが無い個人分に対して地域情報
との関連付けを行う。
ということでいいですか?

この回答への補足

返信ありがとうございます
説明不足で申し訳ありません
処理に関してはその通りです。

相変わらずMySQL3での解決策は見当たりませんが、サブクエリが必要そうだなと感じてきました
もしくはPHPでの制御でしょうか・・・
何か良い方法があればご指南願います

補足日時:2006/12/27 12:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す