基本上,你試圖通過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
但如果你有一個未知的房間數,那麼你可以使用一個prepared statement to create a dynamic version
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;
請證明您已經嘗試過了 - 向我們展示您嘗試過的mysql查詢,以及一些(html?)標記您擁有alre ady得到了。請看[問]一個好問題。 – DaveP
我什麼也沒試。因爲我正在考慮如何從數據庫中獲取數據。如果是一個查詢,我會很高興。在瀏覽器中繪製表格沒有問題。問題是 - 如何從數據庫中獲取數據... – Guntis
[3個表的數據透視表]的可能重複(http://stackoverflow.com/questions/12986802/pivot-table-with-3-tables) – RichardTheKiwi