【问题标题】:Check if not exists and insert in one single query with PHP检查是否不存在并使用 PHP 在一个查询中插入
【发布时间】:2015-10-27 10:08:33
【问题描述】:

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

在第一个查询中,我检查具有该用户 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_id = $_SESSION['user_id'];$post_id 是每个帖子的唯一 ID。

这是我的表结构

【问题讨论】:

  • 阅读url1url2
  • 参考链接可以找到您问题的解决方案,Stackoverflow
  • 您是否在任何搜索引擎中尝试过您的标题?
  • 感谢您的建议,我确实阅读了这些问题,并尝试使用谷歌搜索,但我无法找到答案,但我会再读几次。这仅用于学习目的。

标签: php mysql


【解决方案1】:

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

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 */

【讨论】:

  • 这是否可行,因为一个用户可以对多个帖子进行投票,因此相同的 user_id 可以重复多次 post_id 也是如此,因为不同的用户可以对同一个帖子进行投票,因此 user_id 可以在 likes 表中重复。只有当同一个用户想对同一个帖子投票时,我才不想插入。
  • 是的。这将起作用。在我的情况下,您设置了一组唯一的参数,而不是一个参数。如果您添加了user=1、post=1,然后添加了user=1、post=2 或user=2、post=1,这将是唯一的值组。但是如果这个组不是唯一的“UN DUPLICATE KEY UPDATE”语句将处理
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
相关资源
最近更新 更多