您可能希望做两个查询,然后在任何使用MySQL的情况下进行匹配,例如, PHP。
这两个:
SELECT id, title
FROM room;
SELECT rp.room_id, rp.user_id, u.username
FROM room_participant AS rp
INNER JOIN user as u ON rp.user_id = u.id;
或这两种:
SELECT id, username
FROM user;
SELECT rp.room_id, rp.user_id, r.title
FROM room_participant AS rp
INNER JOIN room as r ON rp.user_id = r.id;
这两个查询意义取决于你与信息真的在做什么。
你可以走了一步,选择这三种分别:
SELECT *
FROM room;
SELECT *
FROM user;
SELECT *
FROM room_participant;
注:它可能会更好陈述列,而不是在未来的新列使用“*”,以防万一加入到表中,您并不真正对这些查询感兴趣。
很显然,你接下来要一切投其所好中无论是使用MySQL,例如PHP。你可以创建房间和用户所选择的信息的列表,然后用类似方式对其进行匹配:
// Use MySQL to populate $roomList from database, then do...
foreach ($roomList as $room)
{
$id = $room['id'];
$title = $room['title'];
$this->roomList[$id] = new Room($id, $title);
}
// Use MySQL to populate $userList from database, then do...
foreach ($userList as $user)
{
$id = $user['id'];
$username = $user['username'];
$this->userList[$id] = new User($id, $username);
}
// Use MySQL to populate $roomParticipantList from database, then do...
foreach ($roomParticipantList as $roomParticipant)
{
$room = $this->roomList[$roomParticipant['room_id']];
$user = $this->userList[$roomParticipant['user_id']];
// You could do one/both of these, depending on requirements.
$room->enterUser($user);
$user->joinRoom($room);
}
你的第二个加入了一个错字:'ON room_participant.user_id' – Jacob
@cularis感谢,固定。 –
您好,感谢您的回答,它的工作原理,但该查询返回与相同ROOM_ID多个记录时,有超过2名人参加在那个房间里。我可以将记录中的用户条目分组吗(类似于房间记录字段中的用户数组)? – Peacemoon