大神們好 小魯又來求Code了....
假設我有3個表
使用者
id | user |
---|---|
1 | 小白 |
2 | 小黃 |
語系 | |
id | userid |
-- | -- |
1 | 1 |
2 | 1 |
3 | 1 |
4 | 2 |
語系資料 | |
id | name |
-- | -- |
1 | 中文 |
2 | 英文 |
3 | 日文 |
要怎麼組成下面這樣呢
需求表
id | user | langnames |
---|---|---|
1 | 小白 | 中文,英文,日文 |
2 | 小黃 | 英文 |
這個需求我也是用php多次查詢組出來了 但想要精進自己所以上來發問 再麻煩大神了QQ
另外 我有試過用 TEMPORARY TABLE 先把 語系表跟語系資料表 先組成 tmp語系
tmp語系
userid | langid |
---|---|
1 | 中文 |
1 | 英文 |
1 | 日文 |
2 | 英文 |
然後再用 子查詢 + GROUP_CONCAT 組出需求的表
但是同事說用TEMPORARY TABLE 在同時有多人查詢的話會出問題
不知道有沒有大神可以提供參考方向呢?
可以使用SQL查出你要的資料,請使用 GROUP_CONCAT
以下是SQL跟測試資料
Schema (MySQL v5.6)
CREATE TABLE User
(`id` int, `user` nvarchar(2))
;
INSERT INTO User
(`id`, `user`)
VALUES
(1, N'小白'),
(2, N'小黃')
;
CREATE TABLE UserLanguage
(`id` int, `userid` int, `langid` int)
;
INSERT INTO UserLanguage
(`id`, `userid`, `langid`)
VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 2)
;
CREATE TABLE Language
(`id` int, `name` nvarchar(2))
;
INSERT INTO Language
(`id`, `name`)
VALUES
(1, N'中文'),
(2, N'英文'),
(3, N'日文')
;
Query #1
select T1.userid id,T2.user,GROUP_CONCAT(T3.name SEPARATOR ',') langnames
from UserLanguage T1
left join User T2 on T1.userid = T2.id
left join Language T3 on T1.langid = T3.id
group by T1.userid;
id | user | langnames |
---|---|---|
1 | 小白 | 中文,英文,日文 |
2 | 小黃 | 英文 |
暐翰大大
感謝你的解答
原來是我Join 用的不夠熟...
本來想說找找看有沒有辦法跑回圈來解這個 沒想到用JOIN就好了QQ