您可能希望执行两个查询,然后在使用 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);
}