检查是否不存在,并使用PHP在单个查询中插入

检查是否不存在,并使用PHP在单个查询中插入,php,mysql,Php,Mysql,我可以将这两个查询合并到一个查询中,该查询将检查用户是否已经喜欢某个特定的帖子,如果不喜欢,则插入数据 在第一个查询中,我检查具有那个用户id和那个帖子id的行是否存在 $existCheck = $con->prepare("SELECT * FROM likes WHERE user=:user AND post=:post"); $existCheck->execute(array(':user'=>$user_id, ':post'=>$post_id)); $e

我可以将这两个查询合并到一个查询中,该查询将检查用户是否已经喜欢某个特定的帖子,如果不喜欢,则插入数据

在第一个查询中,我检查具有那个用户id和那个帖子id的行是否存在

$existCheck = $con->prepare("SELECT * FROM likes WHERE user=:user AND post=:post");
$existCheck->execute(array(':user'=>$user_id, ':post'=>$post_id));
$existNumber = $existCheck->rowCount();
在第二个查询中,若行不存在,则插入数据

if($existNumber == 0) { 
    $insertLike = $con->prepare("INSERT INTO likes (user, post) VALUES(:user, :post)"); 
    $insertLike->execute(array(':post'=>$post_id, ':user'=>$user_id));
}
$user\u id=$\u会话['user\u id']
$post\u id
是每个帖子的唯一id

这是我的桌子结构

您需要将用户和帖子字段设置为唯一

ALTER TABLE `likes` ADD UNIQUE (`user`, `post`)
然后使用一个sql:

INSERT INTO likes (user, post) VALUES(:user, :post) ON DUPLICATE KEY UPDATE `id`=`id` /* Hack to ignore updating */

阅读并参考链接找到问题的解决方案,你在任何搜索引擎中尝试过你的标题吗?谢谢你的建议,我确实读过这些问题,我也尝试过用谷歌搜索,但我想不出答案,但我会再看几遍。这仅仅是为了学习。这会起作用吗?因为一个用户可以在多个帖子上投票,所以同一个用户的id可以重复多次。同样的,对于帖子的id可以重复多次,因为不同的用户可以在同一个帖子上投票,所以用户的id可以在表中重复。只有当同一个用户想在同一篇文章上投票时,我才不想插入。是的。这会奏效的。在我的例子中,您设置了唯一的参数组,而不是一个参数。如果您添加了
user
=1,
post
=1,然后添加
user
=1,
post
=2或
user
=2,
post
=1,这将是唯一的值组。但若这个组不是唯一的,那个么将处理“不重复密钥更新”语句