私はmysqlデータベースを持っています。ユーザーのテーブルがあります。「あるユーザーは別のユーザーの友達ですか?」という質問に答えたいと思います。これらは一方通行の友人関係です。2 つのオプションがあると思いますが、よりパフォーマンスの高いソリューションが必要です。
1) 友人関係のテーブルを保持します。2 つの列:
username | friend_username
--------------------------
mary john
mary steve
mary kate
...
友情の質問に答えるには、2 つの列がユーザー名 1 と 2 に一致する数を選択するだけです。
2) 再び 2 つの列を持つテーブル:
username | friends_serialized
-----------------------------
mary john,steve,kate,
したがって、「friends_serialized」列には (カンマ) で区切られた文字列が保持されます。メアリーが誰かと友達かどうか知りたい場合は、次のようにできます。
select count from xxx where username="mary" AND friends_serialized LIKE "%,steve,%"
(構文がわかりません)。それは本当に最初の実装よりも私に何かを勝ち取るでしょうか? 少なくともよりコンパクトであり、友人のリストをユーザーに配信する必要がある場合、一致するすべての列を選択するのではなく (#1 のように)、1 つの列を読み取るだけでリストを取得できます。
私の問題: ユーザーがゲームをプレイするために互いに招待を送信できるゲーム サービスを実行しています。見知らぬ人が友達以外の招待状を送信できないようにしたい. そのため、別のユーザーに招待状を送信したユーザーが実際に共通の友達であるかどうかをすばやく (そしてコンパクトに) 確認できるようにしたいと考えています。
ありがとう