我有一个群组聊天应用程序,其中的群组,用户和群组用户关系被分为三个表。我可以分别获取组和组用户,但是我想将它们聚集在一起。
我的mysql表是:
CREATE TABLE IF NOT EXISTS users (
user_googleid VARCHAR(255) UNIQUE NOT NULL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255),
firstName VARCHAR(127),
lastName VARCHAR(127),
picture TEXT,
active BOOLEAN,
created DATETIME not null default now(),
last_active DATETIME
);
CREATE TABLE IF NOT EXISTS groups (
group_id bigint unsigned auto_increment UNIQUE NOT NULL PRIMARY KEY,
groupname varchar(500) NOT NULL,
created DATETIME not null default now()
);
CREATE TABLE IF NOT EXISTS group_users (
item_id bigint unsigned auto_increment UNIQUE NOT NULL PRIMARY KEY,
group_id bigint unsigned,
user_googleid VARCHAR(255),
CONSTRAINT group_users_fk1 FOREIGN KEY (group_id) REFERENCES groups (group_id),
CONSTRAINT group_users_fk2 FOREIGN KEY (user_googleid) REFERENCES users (user_googleid)
);
获取用户组的代码为:
con.query("SELECT * FROM group_users WHERE user_googleid = " + con.escape(userid) + ";", function (err, result) {
if (err) throw err;
var groupIds = [];
for (let index = 0; index < result.length; index++) {
groupIds.push(result[index].group_id);
}
if (groupIds.length > 0) {
con.query("SELECT * FROM groups WHERE group_id IN (" + groupIds.join(", ") + ");", function (err, r) {
if (err) throw err;
socket.emit('groups', r);
});
} else {
socket.emit('groups', []);
}
});
获取组用户的代码为:
con.query("SELECT * FROM users u INNER JOIN group_users gu USING (user_googleid) WHERE gu.group_id = " + con.escape(groupID) + ";", function (err, result) {
if (err) throw err;
socket.emit('groupUsers', result);
});
我希望能够同时返回论坛及其用户。我该怎么办?