mysql - 如何使用“插入忽略到”Mysql 查询
问题描述
我有三张桌子:
- 用户详细信息
- 用户徽章
- 徽章
我有一个查询,我使用“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 表的图片:
但是每次我执行命令时,插入忽略都不起作用,而是再次插入一个字段。有人可以帮我解决这个问题。
解决方案
INSERT IGNORE
仅当表中的重复字段设置为时才有效UNIQUE
。user_id
in tableuser_badge
未设置为UNIQUE
,这就是它复制它的原因。
如果您需要为一个用户拥有多个徽章,但这些徽章不应该被复制,您需要将这对设置为UNIQUE
, ->UNIQUE(user_id,user_badge)
没有UNIQUE
,INSERT IGNORE
没有任何意义,因为它在插入相同的记录时不会引发任何错误。
推荐阅读
- php - 无法在 laravel 5.8 中下载 laravel/socialite 包
- c# - 当我使用 DownloadProgressChangedEventHandler 时 C# 控制台应用程序关闭
- powerbi - 更改 Power BI 电源查询中的列显示
- javascript - ReactJS 中未定义的变量
- linux - centos7上如何调试rsyslog
- php - 使用 PHP 和 SSH 与外部数据库交互
- git - 由于樱桃采摘,分支之间存在巨大差异
- conda - 通过 conda 安装后 Gramex 不运行
- html - Scale + Opacity 导致模糊和其他变化
- javascript - 超链接在与 JS 代码连接的 HTML 代码中不起作用