私はマイクロブログのウェブサイトを作っています。ユーザーはお互いをフォローできます。Twitterのように、現在のユーザーがフォローしているユーザーに基づいて、現在のユーザー($ userid)の投稿のストリーム(アクティビティストリーム)を作成する必要があります。私はこれを実装する2つの方法を知っています。どちらがいいですか?
テーブル:
表:投稿
列:PostID、AuthorID、TimeStamp、Content
表:フォロー
列:ポスター、フォロワー
最初の方法は、これら2つのテーブルを結合することです。
select `posts`.* from `posts`,`follow` where `follow`.`follower`='$userid' and
`posts`.`AuthorID`=`follow`.`poster` order by `posts`.`postid` desc
2番目の方法は、$ useridがフォローしているユーザーの配列(ポスター)を作成し、この配列でphp implodeを実行してから、次の場所で実行する
ことです。ユーザーが`user`テーブルの`following`レコードでフォローしているユーザーの数なので、ここでは、ポスターのリストを抽出する際の制限としてこの数を使用します-'followingList':
function followingList($userid){
$listArray=array();
$limit="select `following` from `users` where `userid`='$userid' limit 1";
$limit=mysql_query($limit);
$limit=mysql_fetch_row($limit);
$limit= (int) $limit[0];
$sql="select `poster` from `follow` where `follower`='$userid' limit $limit";
$result=mysql_query($sql);
while($data = mysql_fetch_row($result)){
$listArray[] = $data[0];
}
$posters=implode("','",$listArray);
return $posters;
}
これで、現在の$useridがフォローしているユーザーIDのコンマ区切りリストができました。
そして、アクティビティストリームを作成するために投稿を選択します。
$posters=followingList($userid);
$sql = "select * from `posts` where (`AuthorID` in ('$posters'))
order by `postid` desc";
2つの方法のどちらが優れていますか?そして、フォローの総数(現在のユーザーがフォローしているユーザーの数)を知ることで、2番目の方法と同じように最初の方法で物事を速くすることができますか?
他のより良い方法はありますか?