CREATE TABLE `user` (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
`username` varchar(32) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `post` (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
`owner_id` INTEGER UNSIGNED default NULL,
`content` TEXT default NULL,
PRIMARY KEY (`id`),
KEY `post_I_owner` (`owner_id`),
CONSTRAINT `post_FK_user`
FOREIGN KEY (`owner_id`)
REFERENCES `user` (`id`)
ON DELETE SET NULL
) ENGINE=InnoDB;
CREATE TABLE `vote` (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
`user_id` INTEGER UNSIGNED default NULL,
`post_id` INTEGER UNSIGNED,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `vote_IU_user_post` (`user_id`,`post_id`),
CONSTRAINT `vote_FK_user`
FOREIGN KEY (`user_id`)
REFERENCES `user` (`id`)
ON DELETE SET NULL,
CONSTRAINT `vote_FK_post`
FOREIGN KEY (`post_id`)
REFERENCES `post` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
Итак, с помощью схемы выше мы можем сделать следующее ...
в html / php для страницы viewPost
, которую вы могли бы получить
<form name="vote_form" action="postVote.php" method="POST">
<input type="hidden" name="post_id" value="1" />
<input type="submit" value="Vote for this Post" />
</form>
Итак, в votePost.php
вы можете сделать что-то вроде:
if(isset($_SESSION['user']['user_id']))
{
$userid = $_SESSION['user']['user_id'];
}
else
{
// redirect to a login or something
}
$sql = "INSERT INTO vote (user_id, post_id) VALUES (%s,%s)"
$sql = sprintf($sql, $userid, $_POST['post_id']);
mysql_query($sql);
Таким образом, mysql позаботится о отметке времени для вас. Обратите внимание, что вам нужно проверить / проверить входные данные (что я на самом деле здесь не делал) перед тем, как вставить их в базу данных и все эти забавные вещи по безопасности. Я бы также рекомендовал использовать Mysqli или PDO Mysql вместо старых библиотек mysql и использовать подготовленный этап (который сам по себе позаботится о большей части функций квотирования / выхода из значения)