【发布时间】:2019-03-13 17:56:19
【问题描述】:
我正在尝试创建一个喜欢/不喜欢系统,用户可以在其中对视频提供反馈。该系统可以正常工作,但是用户对喜欢或不喜欢的次数没有限制。
我想过制作一张表格来检查哪个用户喜欢哪个视频。我已经有两张桌子,一张用于视频,另一张用于用户。我想知道这是否是个好主意,或者我是否有更好的方法来解决这个问题。
<?php
session_start();
include "config.php";
if(isset($_POST["submitted"])){
mysqli_query($link, "UPDATE video SET likes = likes + 1 WHERE (v_id = '$vid')");
};
?>
<br>
<form method="post">
<input type="hidden" name="submitted">
<button type="submit">Like</button>
</form>
下面是mySQL代码,
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE video(
v_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
video_name VARCHAR(225) NOT NULL,
id INT NOT NULL,
FOREIGN KEY user_id(id)
REFERENCES users(id)
ON DELETE CASCADE,
n_views INT,
likes INT,
dislikes INT,
image_name VARCHAR(225) NOT NILL
);
【问题讨论】:
-
我在您发布的内容中没有看到任何试图限制某人多次投票的内容。至少您需要知道用户 ID,然后检查您还不需要查看该 ID 是否已投票支持视频 ID 的表格。
-
我还没有创建第三个表来检查用户 ID 和视频 ID,因为我想知道这是否是一个坏主意。曾经有人告诉我,太多的表格可能会在网站上产生问题。
-
不知道是谁告诉你的,但它不是真的(完全)。您的附加表只需要保留用户 ID 和视频 ID,以便您可以轻松查看某人是否已经投票。这是一个二进制结果,是的,他们有或没有。
-
只需创建另一个包含真正喜欢和不喜欢的表,然后在该表上运行您的查询,然后添加一个简单的触发器,当您对其执行 INSERT 时更新电影表的总数其他表。这样,当您执行 INSERT user (unique)、v_id (unique)、type (tiny_int, 0 = dislike, 1 = like)、comment (varchar 255) 等时,数据库将在它们已经返回时返回重复键错误评论了一部特定的电影 v_id