メモ:とある掲示板のいいねボタン
某グループウェア内にFaceBookのような”いいね”ボタンがついた掲示板をちと作った(´・ω・)ス
さらに修正やら・・・これはその記録(´・ω・)ス
役にあまり立たないが、忘備記録で書いておく(´・ω・)ス
前提:
元々ユーザーデータとパスワードは別々に保管し、
ログイン済みで、セッションでIDと名前、権限フラグを持ちまわる。
掲示板をさくっと作る。POSTでテーブルにぶち込み。
テーブルもさくっと
`id` int(5) NOT NULL auto_increment,
`write_day` date NOT NULL,
`mamber_code` varchar(4) NOT NULL,
`name` varchar(20) NOT NULL,
`title` varchar(20) NOT NULL,
`text` varchar(255) NOT NULL,
`good` int(3) NOT NULL default '0',
`bad` int(3) NOT NULL default '0',
とさくっとぶち込み。
パクリインスパイアされたFaceBookやセールスフォースにプラスした”いいね”に対抗した
”アレだな”ボタンようにbadも用意しておく。
続けて、これにいいね、悪いなボタンを押したユーザも保持するテーブルも用意。
`id` varchar(4) NOT NULL,
`post_id` varchar(4) NOT NULL,
`name` varchar(20) NOT NULL,
`goor_or_bad` varchar(1) NOT NULL
要はいいねと押された時に持ちまわったセッション情報で、
このテーブルにぶち込む。
ぶち込みは安価に
try {
$db = db_connect();
$stt = $db->prepare('INSERT INTO テーブル
(id,write_day,mamber_code,name,title,text,good,bad)
VALUES(:id, :write_day, :mamber_code, :name,:title, :text, :good, :bad)');
$stt->bindValue(':id', NULL);
$stt->bindValue(':write_day' , $nowtime);
$stt->bindValue(':mamber_code', $_SESSION["id"]);
$stt->bindValue(':name', $a );
$stt->bindValue(':title', $_POST["title"]);
$stt->bindValue(':text', $_POST["text"]);
$stt->bindValue(':good', '0');
$stt->bindValue(':bad', '0');
$stt->execute();
$db = NULL;
} catch(PDOException $e) {
die("エラーメッセージ:{$e->getMessage()}");
}
とか・・普通に。
書いていてアレと思った点は、
クエリ投げる時に、今回、いいねボタンを押すときに
1.記事を格納しているテーブルにいいねカウントを保持すべきか?
いいねカウントは別のテーブルに保持すべきか?
2.上記だと掲示板一覧にクエリが将来的に負荷おkか?
要は記事一覧にそれぞれのいいねカウントが表示されるが、
もし”いいね”したアカウントを全く別にすると一覧時に、
そのテーブルを見ないといけないので負荷がかかりすぎる。
なので、今回は掲示板自体にいいねカウントを入れ込み、
いいねアカウントとそれを行ったユーザーなど別に分けた。
やはり面倒だがバンバンテーブルを分けるっていう事になったが、
まぁ・・それが一番なんだろうな。
どのCMSみてもそんな感じだし。
メモとして複数PDOで同時にエラーがいくつか発生した。
これは後で確認(´・ω・)ス
さらに修正やら・・・これはその記録(´・ω・)ス
役にあまり立たないが、忘備記録で書いておく(´・ω・)ス
前提:
元々ユーザーデータとパスワードは別々に保管し、
ログイン済みで、セッションでIDと名前、権限フラグを持ちまわる。
掲示板をさくっと作る。POSTでテーブルにぶち込み。
テーブルもさくっと
`id` int(5) NOT NULL auto_increment,
`write_day` date NOT NULL,
`mamber_code` varchar(4) NOT NULL,
`name` varchar(20) NOT NULL,
`title` varchar(20) NOT NULL,
`text` varchar(255) NOT NULL,
`good` int(3) NOT NULL default '0',
`bad` int(3) NOT NULL default '0',
とさくっとぶち込み。
”アレだな”ボタンようにbadも用意しておく。
続けて、これにいいね、悪いなボタンを押したユーザも保持するテーブルも用意。
`id` varchar(4) NOT NULL,
`post_id` varchar(4) NOT NULL,
`name` varchar(20) NOT NULL,
`goor_or_bad` varchar(1) NOT NULL
要はいいねと押された時に持ちまわったセッション情報で、
このテーブルにぶち込む。
ぶち込みは安価に
try {
$db = db_connect();
$stt = $db->prepare('INSERT INTO テーブル
(id,write_day,mamber_code,name,title,text,good,bad)
VALUES(:id, :write_day, :mamber_code, :name,:title, :text, :good, :bad)');
$stt->bindValue(':id', NULL);
$stt->bindValue(':write_day' , $nowtime);
$stt->bindValue(':mamber_code', $_SESSION["id"]);
$stt->bindValue(':name', $a );
$stt->bindValue(':title', $_POST["title"]);
$stt->bindValue(':text', $_POST["text"]);
$stt->bindValue(':good', '0');
$stt->bindValue(':bad', '0');
$stt->execute();
$db = NULL;
} catch(PDOException $e) {
die("エラーメッセージ:{$e->getMessage()}");
}
とか・・普通に。
書いていてアレと思った点は、
クエリ投げる時に、今回、いいねボタンを押すときに
1.記事を格納しているテーブルにいいねカウントを保持すべきか?
いいねカウントは別のテーブルに保持すべきか?
2.上記だと掲示板一覧にクエリが将来的に負荷おkか?
要は記事一覧にそれぞれのいいねカウントが表示されるが、
もし”いいね”したアカウントを全く別にすると一覧時に、
そのテーブルを見ないといけないので負荷がかかりすぎる。
なので、今回は掲示板自体にいいねカウントを入れ込み、
いいねアカウントとそれを行ったユーザーなど別に分けた。
やはり面倒だがバンバンテーブルを分けるっていう事になったが、
まぁ・・それが一番なんだろうな。
どのCMSみてもそんな感じだし。
メモとして複数PDOで同時にエラーがいくつか発生した。
これは後で確認(´・ω・)ス