在我的网站上,当用户登录时,他们可以对电影给予1-5评级。
我想要做的是让数据库知道哪个用户给出了评级,并且如果他们再次点击它而不是创建新条目则更新评级,因此每个用户每个电影不能有多个评级。
表:
登录 - id,用户,密码
电影 - id,movie_name,movie_year
user_movie_ratings - id,user_id,movie_id,rating
在您登录时,您将进入会员页面,检查会话以确保您已登录,然后显示所有电影的列表,然后当您单击移动名称时进入评级页面,您可以给它评分为1-5,然后您将被带回电影页面,并且移动名称旁边会显示平均总评分。
用户可以继续执行此操作并错误地更改平均等级。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<?php
require_once 'sessionCheck.php';
require_once 'init.php';
$query = $con ->query
("
SELECT movies.id, movies.movie_name, AVG(user_movie_ratings.rating) AS rating
FROM movies
LEFT JOIN user_movie_ratings
ON movies.id = user_movie_ratings.movie_id
GROUP BY movies.id
");
$movieTitle = array();
while($row = $query->fetch_object()) {
$movieTitle[] = $row;
}
?>
<head>
<title>Members</title>
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="login">
<?php include 'loginCheck.php';?>
</div>
</div>
<div class="content">
<?php foreach($movieTitle as $movie):?>
<div class = "movies">
<h3>
<a href="movie.php?id=<?php echo $movie->id; ?>">
<?php echo $movie->movie_name; ?></a>
</h3>
<div class="movie-rating">
Rating: <?php echo round($movie->rating); ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<div id="footer"> This is the Footer</div>
</div>
</body>
</html>
答案 0 :(得分:1)
我会与user_id
和movie_id
分别制作一张表
表 - users
id
username
...
表 - movies
id
title
...
表 - ratings
id
(自动)
movie_id
user_id
[编辑]
如果您创建movie_id
和user_id
的唯一索引,则数据库将仅接受每个用户投票一次/电影。如果同一个用户尝试多次对同一部电影进行投票,则会创建一个SQL错误,除非您使用INSERT IGNORE
或ON DUPLICATE KEY UPDATE
(如果您想接受用户更改评级)
[再次编辑 - 重要]
你需要在同一个唯一索引中创建两个id:s,如果你创建一个索引/ id,每个用户ID只会被接受一次,而电影也是如此。 (你不想那样)
(如果我错了,请纠正我?)