嘿,我正在使用这样的查询:
INSERT INTO likes(
likes_memory_id,
likes_owner_id,
likes_like
) VALUES (
:likes_memory_id,
:likes_owner_id,
:likes_like)
当用户单击“赞”按钮时,此查询会添加一个新行。所以这个查询允许喜欢多次。 我想阻止具有相同owner_id和相同memory_id的行。 为了防止这种情况,我可以使用select语句,我可能会在两个查询中成功,但我确信有更好的方法可以做到这一点。 (我研究过if not exists语句,但我不太了解)如何避免只有SQL查询的多个喜欢?
答案 0 :(得分:4)
最简单的方法是在列上创建一个您想要唯一的唯一索引;
CREATE UNIQUE INDEX uq_mem_own ON likes(
likes_memory_id, likes_owner_id
);
...并使用INSERT IGNORE
插入喜欢的内容,如果索引没有阻止它会插入值,否则只是忽略它;
INSERT IGNORE INTO likes(
likes_memory_id,
likes_owner_id,
likes_like
) VALUES (
:likes_memory_id,
:likes_owner_id,
:likes_like)
A simple SQLfiddle to test with。请注意,未插入重复行。
答案 1 :(得分:0)
您需要通过检查用户是否已经喜欢该帖子来以编程方式执行此操作。一种方法是在页面某处设置“喜欢”标志,并在当前用户已经喜欢发布时禁用“喜欢”按钮。
您可以通过运行以下查询来检查插入之前:
SELECT * FROM likes WHERE likes_comment_id = [comment_id] AND likes_owner_id = [owner_id]
如果查询未返回任何结果,请执行INSERT
否则不执行。您也可以在页面加载时运行此功能,以便您可以标记喜欢的评论,然后再次喜欢这些评论。