【发布时间】:2014-07-16 17:23:57
【问题描述】:
我在 stackoverflow 上搜索了这个,虽然我发现了一些类似的东西,但我没有找到任何真正帮助我的东西,所以我会自己问这个问题。
所以我试图在我的网站上为图片实现一个点赞按钮。但我很难弄清楚它是如何进行的。
到目前为止,我在 SQLI 方面有这个:
CREATE TABLE if not exists `likes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_id` varchar(300) NOT NULL,
`liker_username` varchar(50) NOT NULL,
`liked_unliked` enum('0','1') NOT NULL, DEFAULT '0'
PRIMARY KEY (`id`)
);
其中id是like的id,
image_id 是被赞图片的id,
liker_username 是用户点击赞按钮的用户名,
liked_unliked 是该用户是否喜欢该图像(1 表示喜欢,0 表示不喜欢 [确保用户只投票一次])。
我已经将 image_id 存储在 photos 表中。
有人告诉我在 liker_username 和 image_id 上设置一个唯一索引,以防止用户多次喜欢一张图片,但我只是想要第二个意见。
那么……我目前所掌握的是否正确?就像我说的那样,我正在努力让用户可以点击喜欢按钮并喜欢图像,但只能点击一次。任何帮助表示赞赏。谢谢
【问题讨论】:
-
您需要确保任何 (image_id, liker_username) 组合只出现一次。您可以在应用程序逻辑中执行此操作,或者在 mysql 中删除 id 键并使用该对 (image_id, liker_username) 构建一个复合键。哦,抱歉,您的唯一索引可以做到这一点 :) 好吧,这对我来说看起来不错!
-
没有看到任何php代码,这对我们来说只不过是一张桌子。就个人而言,我可能不会将用户名存储在此表中,而是将 user_id 作为外键存储到您的用户表中(假设存在)。
-
节省编程时间。另一方面,你会得到一个 DB-Error(考虑你想要处理的错误)。
-
据我所知,实现这个约束只有两个选项。因此,我认为这个问题与UNIQUE constraint vs checking before INSERT 重复。尽管如此,为一个格式正确的问题 +1。