アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpにて出欠登録管理を作成しています。
日程表の登録、表示、編集、削除まではできていますが、肝心のメンバーの出席、欠席等の登録でつまずいています。

流れとしては、ユーザーログイン→日程表→出欠登録という流れです。
出欠登録では、出席、欠席を登録した際にデータベースに登録されるようにしています。

メンバーのデータベース(DBテーブル名 member)と日程表のデータベースは(DBテーブル名 schedule)別々にしています。

出席・欠席などはラジオボタンにて作成しています。
出欠登録をするとその日程表のカラム(出席を選んだ場合は出席のカラム、欠席の場合は欠席のカラム)に名前とコメントが同時に登録されるようにしたいです。

例(山田太郎が出席を選んだ場合)
| attendance(出席) | absence(欠席) |
| 山田 太郎(がんばります) | |

例(山田次郎が欠席を選んだ場合)
| attendance(出席) | absence(欠席) |
| 山田 太郎(がんばります) | 山田 次郎(すみません) |

という風に追加されていくいうものにしたいのですが。
ラジオボタンにてカラムを選ぶことは可能なのでしょうか?

お分かりの方がいらっしゃいましたら、参考サイトまたはソース等をご教授いただければと思います。

わかりにくい点があるとは思いますが、ご了承下さい。
宜しくお願いいたします。

A 回答 (3件)

> とても間単にまとめるとラジオボタンの選択で登録するカラムを変更し


> (登録するデータベースは変わらない)、なおかつ選んだラジオボタンの
> カラムに登録できるという内容にしたいのです。

表示部分や、操作方法はプログラムの作り方で何とでもなるため、
想定されている構成であっても、出欠登管理のテーブルが別になって
いてもどちらでも可能です。

こんな感じでしょうか?
・マイページにログインすると自分の名前、直近の試合スケジュールが
 一覧表示されている
・試合詳細では、(日時、対戦相手)参加者一覧が出欠別に表示されている
・ある試合に対して自分の出席、欠席をラジオボタンで選択する。
 (任意でコメント入力)

※詳細で出欠登録せずに一覧で出欠登録でも同じ


想定されている構成の場合、次のような問題が発生します。

1)出欠登録を行う場合に書き込みが可能なレコードを探す必要がある
 「attendance」「absence」いずれかが空いている、なければ新規の
 レコードを登録する

2)ある試合に対しての出欠一覧を表示する場合、s_date、opponentの
 両方が一致する試合を探す必要がある。

3)出欠の変更を行う場合に、いついつの試合で山田次郎さんが登録
 されているレコードを探して削除。空いているレコードを探して
 書き込みという処理をする必要がある。

4)s_date、opponentに変更があった場合に、該当するレコードを全て
 修正する必要がある。


4)に関しては、修正する必要はないという話であればいいのですが、
1)2)3)に関してはおそろしく非効率です。



では、出欠管理テーブルを用意することをおすすめする理由ですが、
上記1~4に対して次のようになります。

1)新規登録の場合はレコードを1行足すだけでいい。出欠変更なら
 ID指定でupdateするだけ

2)該当の試合のIDを抽出するだけですむ。表示に際しては、出欠
 フラグのYNで振り分け

3)修正する主キーを指定して、フラグを更新するためにupdate

4)scheduleの該当する試合1レコードの修正で終わる



で、最初の話に戻るんですが、「どうやって作ったらいいのか」なのか
「どのように設計すればいいのか」です。

おそらく、「ある試合に対しての出欠登録をするんだから、scheduleに
書き込みをしなくては」というイメージがあるのではないかと。
エクセルなんかで作る場合はまさにそうなりますよね。

DBを使う場合は、「この試合」に対しての「出席者一覧」を拾ってきて、
最終的にPHP側で表示を整える、という考え方が必要です。

「データベース 正規化」で検索していただくのがよろしいかと。


正直申し上げて、現在想定されている設計はおすすめしませんよー。

参考URL:http://www.kogures.com/hitoshi/webtext/db-seikik …
    • good
    • 0

できるできないで言えば、そのように作ればできますので、


質問の意図が「どうやって作ったらいいのか」なのか
「どのように設計すればいいのか」なのかで回答がかなり
変わっちゃいますね。


で、質問者様の意図通りにしたいなら、ラジオボタンの
どちらを選択したかによってデータの入れる先を変えれば
可能だと思いますが、めさめさ面倒くさいです。

1.出欠登録する各データから出欠いずれかに空きがあるレコードを探す。←←

2.登録する
■出席の場合
insert into 出欠テーブル(id, attendance) values($id, '山田 太郎(頑張ります)');

■欠席の場合
insert into 出欠テーブル(id, absence) values($id, '山田 次郎(頑張ってください)');


>三郎さんが追加された場合
> 例
> | attendance(出席)  | absence(欠席) |
> | 山田 太郎      | 山田 次郎   |
> | 山田 三郎      |           |

出力の際のイメージからこのようにされたのではないかと思いますが、
これではDBを使用する意味がないかと。

もし、ほかに意図があるようでしたら、それをお伝えください。


単純に考えると設計上はこうなるのではないでしょうか。

出欠テーブル
|主キー|試合ID|メンバーID|出欠フラグ(Y/Nとか)|コメント|登録日とか|

この場合は、ラジオボタンの選択で出欠フラグを変更することになります。
出力する際には、それぞれ出席の人と欠席の人を抽出してしまえば可能です。

この回答への補足

度重なるご回答有難う御座います。

まずデータベースですが、
memberのテーブル
| id      | pass | first_name | last_name | b_year | b_month | b_day |
| t-yamada | 1234 | 山田    | 太郎    | 2010  | 09     | 20  |
| j-yamada | 5678 | 山田    | 次郎    | 2010  | 09     | 21  |
| s-yamada | 9012 | 山田    | 三郎    | 2010  | 09     | 22  |

scheduleのテーブル
s_no | s_date(日程) | opponent(対戦相手) | attendance(出席)  | absence(欠席) |
01  | 2010/09/20 | アメリカ代表      |             |           |

としています。

ログインされた方によって各ページでは随時、名前を表示できるようにしています。
その下層に試合日程のページがあります。

試合日程のページは上記に記載があるscheduleテーブルをよびだしており、
GETにて各試合日程の内容を表示しています。

そのため、ページによってscheduleテーブルから呼び出される内容はかわります。
先ほどもおっしゃいましたが、山田太郎さんがログインした場合は
山田さんの名前が表示され、各試合日程に出欠登録ができるというものにしています。

この際に山田太郎さんは特に名前も入力をせずにラジオボタンのみで、出欠登録ができるようにしたいのです。
ラジオボタンで出席を選んだだけでscheduleテーブルの”attendance(出席) ”に名前が入るという風に考えています。
山田次郎さんも同じ感じでラジオボタンで欠席を選んだだけで”absence(欠席)” に名前が追加される。

ですので、出欠登録のテーブルを別に作るというのは考えていません。

とても間単にまとめるとラジオボタンの選択で登録するカラムを変更し(登録するデータベースは変わらない)、なおかつ選んだラジオボタンのカラムに登録できるという内容にしたいのです。


説明が下手で申し訳ありません。

補足日時:2010/09/20 21:52
    • good
    • 0

> ラジオボタンにてカラムを選ぶことは可能なのでしょうか?



 可能かどうかというより、可能になるようにデータベースとかプログラムを作るものです。
 作りかたが正しければ可能です。

 それより、設計イメージが良くわかりません。
 メンバー毎に出欠を管理するという設計ではないのですか?
 3人目の山田三郎さんが出席または欠席の時はどうなります?
 名前とコメントはくっついたままなのですか?

 日程表とメンバーのデータベース間の関連性もわかりません。
 この状態だと、いつの日程で出席または欠席なのか結び付いていませんよね。

この回答への補足

お忙しい中有難う御座います。

説明不足で申し訳ありません。

>それより、設計イメージが良くわかりません。
>メンバー毎に出欠を管理するという設計ではないのですか?
メンバー毎ではなく日程毎に出欠を管理する設計になります。

>3人目の山田三郎さんが出席または欠席の時はどうなります??


| attendance(出席)  | absence(欠席) |
| 山田 太郎      | 山田 次郎   |
| 山田 三郎      |           |

山田三郎さんが出席にした場合は山田太郎さんの下に追加されていきます。
その後やっぱり欠席にする場合は欠席欄に追加され出席の欄からは削除されます。


>名前とコメントはくっついたままなのですか?
出欠登録に際にコメントを入力してもらい、出席か欠席に登録した際に名前と一緒にくっつくという感じです。

例(コメントなし)
| attendance(出席) | absence(欠席) |
| 山田 太郎      | 山田 次郎   |
| 山田 三郎      |           |

例(コメントあり)
山田太郎さんが出欠登録で”出席”を選びコメントを「がんばります。」と入力。
山田次郎さんが出欠登録で”欠席”を選びコメントを「がんばってください。」と入力した。

| attendance(出席)      | absence(欠席)        |
| 山田 太郎(がんばります) | 山田 次郎(がんばってください) |
| 山田 三郎          |         |


>日程表とメンバーのデータベース間の関連性もわかりません。
申し訳ありません。こちらは気にしなくて大丈夫です。

>この状態だと、いつの日程で出席または欠席なのか結び付いていませんよね。
理想は下記の状態です。
s_date(日程) | opponent(対戦相手) | attendance(出席)      | absence(欠席) |
2010/09/20 | アメリカ代表       | 山田 太郎(がんばります) | 山田 次郎(がんばってください) |
                        | 山田 三郎          |                     |

山田三郎さんははずれていますが、2010/09/20の日程の出席になります。

ぜひこのような設計を考えておりますので、よろしければご教授お願いいたします。

補足日時:2010/09/20 10:25
    • good
    • 0

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