Mysql 从3个表中获取数据并显示漂亮的表

Mysql 从3个表中获取数据并显示漂亮的表,mysql,sql,pivot,Mysql,Sql,Pivot,我有3张桌子:用户、房间、房间访问。 在用户中是:user1、user2、user3 房间:1号房间2号房间N(我大约有10个房间) 房间通道(房间,uid):房间1,1;房间2,1;罗曼,1;2、3号房间;1、3号房间 所以。用户3可以访问room1,用户2可以访问roome,等等。 在管理区,我想显示: 基本上,表格室内容显示在表格标题中,表格用户内容显示在表格行中。也许有办法在一次查询中选择所有数据?复选符号在哪里,我想在那里放置复选框。所以我不知道怎么做那张桌子 实际上,您正试图通过PI

我有3张桌子:用户、房间、房间访问。 在用户中是:user1、user2、user3 房间:1号房间2号房间N(我大约有10个房间) 房间通道(房间,uid):房间1,1;房间2,1;罗曼,1;2、3号房间;1、3号房间

所以。用户3可以访问room1,用户2可以访问roome,等等。 在管理区,我想显示:


基本上,表格室内容显示在表格标题中,表格用户内容显示在表格行中。也许有办法在一次查询中选择所有数据?复选符号在哪里,我想在那里放置复选框。所以我不知道怎么做那张桌子

实际上,您正试图通过
PIVOT
返回数据。MySQL没有
PIVOT
函数,因此您可以使用聚合函数和
CASE
语句的组合。如果您提前知道您可以使用的房间数量:

select u.uname,
  max(case when r.rname = 'room 1' then 'y' else 'n' end) room1,
  max(case when r.rname = 'room 2' then 'y' else 'n' end) room2,
  max(case when r.rname = 'room 3' then 'y' else 'n' end) room3
from users u
left join room_access ra
  on u.uid = ra.userid
left join rooms r
  on ra.roomid = r.rid
group by u.uname
看见 但是如果你有未知数量的房间,那么你可以使用


请参见演示您已经尝试过的内容-向我们展示您已经尝试过的mysql查询,以及您已经获得的一些(html?)标记。请看一个好问题,我什么也没试过。因为我正在考虑如何从数据库中获取数据。如果是一个问题,我会很高兴。在浏览器中绘制表格没有问题。问题是-如何从数据库中获取数据…数据可能重复
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN rname = ''',
      rname,
      ''' THEN ''Y'' ELSE ''N'' END) AS ',
      replace(rname, ' ', '')
    )
  ) INTO @sql
FROM rooms;

SET @sql = CONCAT('SELECT u.uname, ', @sql, ' 
                  from users u
                  left join room_access ra
                    on u.uid = ra.userid
                  left join rooms r
                    on ra.roomid = r.rid
                  group by u.uname');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;