iT邦幫忙

0

mysql 查詢的方法...

大神們好 小魯又來求Code了....

假設我有3個表
使用者

id user
1 小白
2 小黃

語系

id userid langid
1 1 1
2 1 2
3 1 3
4 2 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 在同時有多人查詢的話會出問題
不知道有沒有大神可以提供參考方向呢?

2 個回答

1
暐翰
iT邦大師 1 級 ‧ 2018-11-02 11:57:21
最佳解答

可以使用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 小黃 英文

View on DB Fiddle

暐翰大大
感謝你的解答
原來是我Join 用的不夠熟...
本來想說找找看有沒有辦法跑回圈來解這個 沒想到用JOIN就好了QQ

1
小魚
iT邦高手 1 級 ‧ 2018-11-02 12:02:05
小魚 iT邦高手 1 級 ‧ 2018-11-02 12:02:48 檢舉

竟然有人搶先了
/images/emoticon/emoticon39.gif

暐翰 iT邦大師 1 級 ‧ 2018-11-02 12:07:34 檢舉

/images/emoticon/emoticon37.gif

小魚大大
還是感謝你熱心回覆

我要發表回答

立即登入回答