私は PHP でソーシャル ネットワーク タイプのサイトに取り組んでいます。以前にこれを行ったことがありますが、サイトは私のコーディング能力を超えて成長しました。これは数年前のことで、今はこのプロジェクトにもう一度取り組みたいと思っています。
基本的に、私のネットワークには、誰が誰の友達であるかを追跡する friend_friend mysql テーブルがあります。確認されたすべての友達に対して、DB に 2 つのエントリがあります。このテーブルは次のとおりです。
CREATE TABLE IF NOT EXISTS `friend_friend` (
`autoid` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(10) DEFAULT NULL,
`friendid` int(10) DEFAULT NULL,
`status` enum('1','0','3') NOT NULL DEFAULT '0',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`alert_message` enum('yes','no') NOT NULL DEFAULT 'yes',
PRIMARY KEY (`autoid`),
KEY `userid` (`userid`),
KEY `friendid` (`friendid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1657259 ;
次に、friend_reg_user というすべてのユーザー情報を含むユーザー テーブルがあります。
次に、ユーザーが投稿する速報のテーブルです。オブジェクトは、あなたが友達であるユーザーからの速報のみを表示することです。速報表はこちら
CREATE TABLE IF NOT EXISTS `friend_bulletin` (
`auto_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL DEFAULT '0',
`bulletin` text NOT NULL,
`subject` varchar(255) NOT NULL DEFAULT '',
`color` varchar(6) NOT NULL DEFAULT '000000',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` enum('Active','In Active') NOT NULL DEFAULT 'Active',
`spam` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`auto_id`),
KEY `user_id` (`user_id`),
KEY `submit_date` (`submit_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=455144 ;
これを行うには、friend_friend テーブルでクエリを実行してユーザーのすべての友達を取得し、1,2,3,4,5,6 のような文字列に追加します。これらは友達 ID 番号になります。掲示板作成者 ID がフレンド ID リストにある掲示板テーブルから
2 番目の方法は、JOINS を使用して、このすべてのデータを一度に取得することです。
最終的に私の探求は、サイトが非常に大きくなると、データベースに何百万もの友人の記録と速報があるとき、これはすべて遅くなります.物事をスピードアップするための私のオプションは何ですか? これを行うより良い方法はありますか?また、速報だけでなく、より多くのユーザー アクションを含むように速報を変更することを計画しています。