【问题标题】:Vote Up/Like System for posts using MySQL对使用 MySQL 的帖子进行投票/点赞系统
【发布时间】: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_usernameimage_id 上设置一个唯一索引,以防止用户多次喜欢一张图片,但我只是想要第二个意见。

那么……我目前所掌握的是否正确?就像我说的那样,我正在努力让用户可以点击喜欢按钮并喜欢图像,但只能点击一次。任何帮助表示赞赏。谢谢

【问题讨论】:

  • 您需要确保任何 (image_id, liker_username) 组合只出现一次。您可以在应用程序逻辑中执行此操作,或者在 mysql 中删除 id 键并使用该对 (image_id, liker_username) 构建一个复合键。哦,抱歉,您的唯一索引可以做到这一点 :) 好吧,这对我来说看起来不错!
  • 没有看到任何php代码,这对我们来说只不过是一张桌子。就个人而言,我可能不会将用户名存储在此表中,而是将 user_id 作为外键存储到您的用户表中(假设存在)。
  • 节省编程时间。另一方面,你会得到一个 DB-Error(考虑你想要处理的错误)。
  • 据我所知,实现这个约束只有两个选项。因此,我认为这个问题与UNIQUE constraint vs checking before INSERT 重复。尽管如此,为一个格式正确的问题 +1。

标签: php mysql


【解决方案1】:

看起来你走在正确的轨道上。

正如另一位用户所说,您可能会考虑拥有一个包含用户数据和 ID 的 users 表,并将外键 liker_user_id 放入您的 likes 表中。您的图像 ID 也可以是外键,图像存储在 images 表中。

您可以考虑允许匿名投票,每个地址一个,如果用户未登录,则将 ip 地址添加到数据库中。您可以通过以下方式获取用户 ip 地址:

$_SERVER['REMOTE_ADDR'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多