首页 > 解决方案 > 填充 many - many 不会填充,并且不会引发错误

问题描述

我的数据库如下所示:

表:公会 -> guild_id、guild_name、guild_owner、guild_owner_id、guild_member_count、guild_prefix。

表:成员 -> member_id、member_name、member_disc

表:公会成员 -> guild_id、member_id、warning_points、chat_points

Discord 中的值也是如此guild_id,并且member_id都是 PK 值。我的目标是专门将每个成员与一个公会联系起来,添加warning_pointschat_points

我可以同时填充Guilds表格和Members表格,但是,它不会Guildmembers使用相关数据自动填充表格。

在尝试使用此代码填充表时:

let guiMemSQL = 'INSERT INTO Guildmembers(guild_id, member_id) SELECT Guilds.guild_id, Members.member_id FROM Guilds INNER JOIN Members ON Guilds.guild_id = Members.member_id'
con.query(guiMemSQL, (err, result) => {
    if(err){ throw err }
    console.log(`Updated GuildMembers Table`);
})

我没有错误。该表也不填充。所以要么我的代码/逻辑有缺陷,要么我不明白我在做什么。

我试图获得的信息是guild_idand member_id,它们是BIGINTs。

标签: javascriptmysqlnode.jsdiscord.js

解决方案


mysql 不会自动填充多对多表,您必须INSERT像任何其他表一样输入值。我这样做的方法是使用以下代码:

// Update GuildMembers Table
let guiID = MemberInfo.userGuildID;
const memGuiID = BigInt(guiID); // Convert String to Number
const updGMT = {guild_id: memGuiID, member_id: memIdNo };
let guiMemSQL = 'INSERT INTO Guildmembers SET ?';
con.query(guiMemSQL, updGMT, (err, result) => {
    if(err){ throw err }
    console.log(`Updated GuildMembers Table`);
})

这里参数化查询的用例虽然不是特定问题,但对于帮助抵御sql injection攻击风险很重要。并且会被视为很好的做法。

如果有人知道让字段自动填充的方法,请分享!

目前我将留下我为解决这个问题所做的工作,以防其他人有类似的问题。


推荐阅读