首页 > 解决方案 > 如何使用“插入忽略到”Mysql 查询

问题描述

我有三张桌子:

  1. 用户详细信息
  2. 用户徽章
  3. 徽章

在此处输入图像描述

我有一个查询,我使用“insert ignore into”命令将徽章中的徽章 ID 和 user_details 中的用户 ID 插入 user_badge。

$username=$_SESSION['username'];
$getlife="SELECT * FROM user_details WHERE username='$username'";
$getlifedb=mysqli_query($db, $getlife);
while ($row=mysqli_fetch_array($getlifedb)){
    if($row['fullife'] == '1'){
       $full="INSERT IGNORE INTO user_badge(user_id, badge_id) 
                SELECT u.user_id, b.badge_id 
                FROM user_details as u 
                    CROSS JOIN badges as b 
                WHERE u.user_id='$id' 
                AND b.badge_id='8'";
        mysqli_query($db, $full) or die(mysqli_error($db));
   }
} 

下面是 user_badge 表的图片:

在此处输入图像描述

但是每次我执行命令时,插入忽略都不起作用,而是再次插入一个字段。有人可以帮我解决这个问题。

标签: mysql

解决方案


INSERT IGNORE仅当表中的重复字段设置为时才有效UNIQUEuser_idin tableuser_badge未设置为UNIQUE,这就是它复制它的原因。

如果您需要为一个用户拥有多个徽章,但这些徽章不应该被复制,您需要将这对设置为UNIQUE, ->UNIQUE(user_id,user_badge)

没有UNIQUE,INSERT IGNORE没有任何意义,因为它在插入相同的记录时不会引发任何错误。


推荐阅读