人々の間のリンクを保存するデータベースを作成したいと思います。
次に、どの人物がどの人物とつながっているかを詳述する記録を取り戻す必要があります。
出力する必要があります: person1 は person2 に接続され、person3 などに接続されます。
このタスクを開始するにはどうすればよいですか?
人々の間のリンクを保存するデータベースを作成したいと思います。
次に、どの人物がどの人物とつながっているかを詳述する記録を取り戻す必要があります。
出力する必要があります: person1 は person2 に接続され、person3 などに接続されます。
このタスクを開始するにはどうすればよいですか?
わかりました、MySQL データベース内の特定のエントリ間の関係を知りたいということだと仮定しましょう。私の意見では、理想的な方法は、この場合は tblusers と呼ばれる users テーブルを持つことです。多くの列があると思いますが、この接続のために、他のユーザーとの関係のために 1 つの列に「ucons」という名前を付けることができます。
ご存じかもしれませんが、users テーブルには主キー列があり、この場合は「uid」という名前を付けます。各ユーザーは主キー列「uid」で一意の ID を受け取るため、これらの主キーは最終的にユーザー エントリをターゲットにするために使用されます。
次のユーザー ID を持つ user1、user2、user3 の 3 人のユーザーがいるとします。
ユーザー1 -> 1
ユーザー2 -> 2
ユーザー3 -> 3
さて、リレーションシップに関するあなたの質問に対して、私は通常、リレーションシップ キーを別のテーブルに保存します。これは、何千ものユーザーがいる可能性があり、各ユーザーが 200 の接続を持っている場合、特にテーブルで多くのオーバーヘッド作業が発生するためです。テーブルで他の操作が同時に実行されている場合! これは、1 対多 - 多対 1 の関係として知られています。
ここで、人々の間の実際の「接続」を表す 2 つの列を持つ秒テーブルを作成します。これを「cid」、「cuser」、および「ccon」列を持つ「tblconnections」と呼びます。
cid は主キーです cuser は接続を作成したばかりの tblusers のユーザーの ID です ccon は tblusers の CONNECTED ユーザーの ID です
では、次の 2 つのテーブル レイアウトを見てみましょう。
tblusers:
-------------------
uid | uname | uage
-------------------
0 | Joe | 22
1 | Bob | 54
2 | Tod | 14
テーブル接続
-------------------
cid | cuser | ccon
-------------------
0 | 1 | 2
1 | 1 | 0
これは、id '1' を持つユーザーが tblusers でユーザー '2' に 1 つとユーザー '0' に 1 つ、2 つの接続を持っていることを使用に伝えます。したがって、ユーザー 1 (Bob) は Joe だけでなく Tod にも接続します。
この情報を使用して、次のような単純な mysql クエリを実行できます。
SELECT uid AS id, (SELECT GROUP_CONCAT(cconn) FROM tblconnections WHERE cuser = id) FROM tblusers;
これにより、「tblusers」からの通常の iser ID と、接続されているすべてのユーザーの連結文字列が返されます。したがって、ユーザー ID は '3' で、連結された文字列は次のようになります: 2,6,22,45,67,8 これは、この場合、ユーザー '3' に接続されているすべてのユーザーのリストです。
接続されている各ユーザー情報をクエリとともに返す方法は他にもたくさんあることに注意してください。これは単なる例です。
チュートリアルを読みたい場合は、単に「データベースの関係」、「1 対多の多対 1 の関係」、または「mysql テーブルの関係」をググってください。
これがあなたの問題に光を当てることを願っています。
良いものを持っている。