- ベストアンサー
フレンドリストを作成する際の設計について
- 初心者が考えるSNSのフレンドリストの設計について説明します。
- フレンドリストの最大数が1000の場合、どのような設計が適切かについて検討します。
- テーブルの作成方法やカラムの管理方法についても考えます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんなデータの持ち方をすると集計しやすいかと 仮に長野、亀井、坂本、阿部、村田の5人がいて、 長野は亀井と友達、阿部は長野、亀井、坂本と友達、村田はぼっちだとすると //元データ create table user(uid int not null unique ,name varchar(20)); insert into user values(1,'長野'),(2,'亀井'),(3,'坂本'),(4,'阿部'),(5,'村田'); create table friend(id int primary key auto_increment,fid int,uid int,unique(fid,uid)); insert into friend(fid,uid) values(1,1),(1,2),(2,1),(2,4),(3,2),(3,4),(4,3),(4,4); ※friendテーブルのfidは友達二人をつなぐためのリンク用id (1)各自友達が何人いるか集計する select user.uid,name,coalesce(count,0) as count from user left join( select uid,count(*) as count from friend group by uid ) as sub on sub.uid=user.uid order by uid; (2)各自の友達の名前を羅列する select u1.uid,u1.name,friends from user as u1 left join( select f1.uid,group_concat(u2.name) as friends from friend as f1 inner join friend as f2 on f1.fid=f2.fid and not f1.uid=f2.uid inner join user as u2 on f2.uid=u2.uid group by uid ) as sub on u1.uid=sub.uid
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5238/13705)
通常なら「テーブルは一つとし、会員番号のカラムを二つ用意、関係性を示したテーブルを作る」だと思います。
お礼
回答有り難うございます。
お礼
回答有り難うございます。