防止多个查询PDO

时间:2014-06-01 10:17:50

标签: php mysql sql

嘿,我正在使用这样的查询:

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查询的多个喜欢?

2 个答案:

答案 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否则不执行。您也可以在页面加载时运行此功能,以便您可以标记喜欢的评论,然后再次喜欢这些评论。