• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フレンドリストのようなものを作る場合の設計)

フレンドリストを作成する際の設計について

このQ&Aのポイント
  • 初心者が考えるSNSのフレンドリストの設計について説明します。
  • フレンドリストの最大数が1000の場合、どのような設計が適切かについて検討します。
  • テーブルの作成方法やカラムの管理方法についても考えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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

auau5656
質問者

お礼

回答有り難うございます。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

通常なら「テーブルは一つとし、会員番号のカラムを二つ用意、関係性を示したテーブルを作る」だと思います。

auau5656
質問者

お礼

回答有り難うございます。

関連するQ&A