私は、私のデータベース内のグループとユーザーを含むいずれかを含むものを2つのテーブルを持っています。ユーザーがさえ複数回これらのグループのメンバーになることができます。
ユーザーは、「ID」、「名前」、「姓」、「グループ」、および重要気圧ないいくつかの他の人が含まれていますので。テーブル群は、ちょうどidとグループ名が含まれています。これらのグループは、動的であり、時にはグループが追加され、時にはグループが削除されます。
フロントエンドでは、人々は複数選択して、フォームを使用してグループに自分自身を追加することができます
しかし、私はこれ以上、さらにを得ることはありません。私は2つの問題に直面しています。SQLクエリでそれらを置くことは無地簡単ではありませんので、から収集されたデータは、アレイに含まれます。一方、(私はただ一つの変数に配列からの情報は、「」で区切ってアルを置くことを考えていた)、多分この表の形式は、そうするための最良の方法ではありません。
私は何ので、私はあなたたちから尋ね。それはテーブル構造を変更し、どのようにした方が良いですか?私は(区切ら「」)<\ s>は、データベースにそれらを置くことができるので、私は1つの変数に配列を結合するにはどうすればよいです
EDIT !:としては、I「vは新しいテーブルを作成し、アンディ・ホールが推奨します。IDを持つwerkgroep_user、werkgroep_id、およびUSER_ID。
これは私の選択ルックスが好きなものです
<select id="testwerkgroep" name="testwerkgroep[]" multiple>
<option value="">geen werkgroep</option>
<option value="1">werkgroep 1</option>
<option value="2">werkgroep 2</option>
</select>
今私はDBからデータを取得の問題に直面しています。私は、すべてのユーザー(名)及びそのグループ(名)たとえばたい
あなたのユーザーとグループのテーブルのように見えるが多対多の関係を持っています。「多くのユーザーが多くのグループの一部であることができます」。
中間のテーブルと多対多の関係を解決せずに、あなたは確かに値をカンマ区切りの文字列を使用することができますusers.group
フィールド。あなたは使用してそれを達成しまうimplode()
グループIDをおアレイ上の機能を:
$commaSeparatedGroupIdString = implode($groupIdArray);
あなたは、データベースから取得する場合と、あなたはそれらを配列にバックアウト爆発することができます。
$groupIdArray = explode($commaSeparatedGroupIdString, ",");
第二(と、私が言うより良い)方法は、仲介テーブルと多対多の関係を解消することです。このテーブルには、何かのような名前を付けることができgroup_assignments
。一つは、user
多くを持っていることgroup_assignments
、もう一つはgroup
、多くを有することができますgroup_assignments
。
構造group_assignment
表は次のようになります。
id
主キー
user_id
外部キーusers.id
フィールド
group_id
外部キーgroups.id
フィールド
ユーザーがグループに自分自身を割り当てるしたいときはいつでも、彼らが提出するだろうし、あなたのアプリケーションは、新しいレコードを作成しgroup_assignments
、彼らがに自分自身を割り当てるために提出したグループのユーザーとIDのIDを持つテーブル。ユーザーのグループ割り当て情報を取得することは、その後の使用が必要になりJOIN
、関連するすべてつかむためにあなたのSQL内のgroup_assignment
ユーザーにレコードを。割り当てを削除することで適切なレコードを削除するなど、簡単なようであるgroup_assignments
テーブル。