
かなり初心者です。もしかしたら妙な事を訊いているのかもしれません。
php5.4.16とmysql5.5.32でSNSのフレンドリストのような機能を作ろうと思います。
フレンド最大数は1000とします。この場合、1000個もカラムを作るのでしょうか?
それとも、会員個別にテーブルを作ってそこで管理するのでしょうか。
もしくは、テーブルは一つとし、会員番号のカラムを二つ用意、関係性を示したテーブルを作るのでしょうか?
もしくは、カラムは一個で文字列で操作したりするのでしょうか?(カンマで区切る等)
パフォーマンス的にどの設計が正しくて、どの設計が間違いなのでしょうか…
回答よろしくお願いします。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[MySQL]LOAD DATA INFILE一部レ...
-
フレンドリストのようなものを...
-
group byで最後のレコードを抽...
-
MYSQLのストアドでの動的SQLに...
-
他のシートの検索
-
DBの定義のサイズを大きくし過...
-
INDIRECT関数の代替方法は?
-
自分自身のテーブルを参照して更新
-
SQLです!!教えてください。
-
SQLServerでNULLを挿入したいです
-
SQLでカラムを追加し、条件に合...
-
UNIONする際、片方テーブルしか...
-
AUTO_INCREMENTに0はダメ?
-
update時にtimestampが更新され...
-
エクセルかワードで家系図を作...
-
SELECT文で、指定カラム以外の...
-
複数カラムに対するLIKE文の最適化
-
構造が異なる二つのテーブルをu...
-
一部のカラムでdistinctし全て...
-
SQLiteでカラム情報の取得って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
[MySQL]LOAD DATA INFILE一部レ...
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
データを同データが並ばないよ...
-
同一日に複数レコードがある場...
-
sqlについて質問です。
-
MySQL AUTO_INCREMENTが最大に...
-
betweenを使うyyyy/mm/ddでの範...
-
mysqlの結果の速度はデータの違...
-
データ型による検索速度の違い...
-
カラムの値を、条件により動的...
-
フレンドリストのようなものを...
-
年月日のうち月日だけ取得したい。
-
MYSQLのストアドでの動的SQLに...
-
select * での表示が崩れる?
-
MySQLデータでデータチェック
-
データの暗号化について
おすすめ情報