我正在尝试将两个表中的数据连接成一行,但我似乎无法弄清楚如何实现这一目标。
表1结构
id
,name
,number
,email
表2结构
id
,friends
事情在表1中,id是唯一的,而在表2中id
不是,他可以有很多朋友。 (Ofc就是这个例子)。
我正试图让这一行看起来像这样
id
,name
,number
,email
,friend[1]
,friend[2]
等。
任何想法如何实现这一点,或者我是否需要更改我的数据库结构才能获得此结果?
*注意(他只有8个不同的朋友可供选择)。
答案 0 :(得分:0)
您是否考虑过实施group_concat? (http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/)
无论每个用户只有8个朋友这一事实,基于连接的行生成列是不实用/有效的解决方案。
答案 1 :(得分:0)
最有效的方法是将结果与JOIN语句分组;
SELECT T1.*, F1.Friend
FROM Table_1 as T1
LEFT JOIN Table_2 as F1
ON T1.id = F1.id
然后遍历mysql客户端中的每一行。
另一种方法是使用多个连接到同一个表,但没有更好的方法来区分各个朋友记录,最终在JOIN语句中做了一些混乱的排除。
SELECT T1.*, F1.Friend, F2.Friend, F3.Friend, [snip/] F8.Friend
FROM Table_1 as T1
LEFT JOIN Table_2 as F1
ON T1.id = F1.id AND F1.Friend NOT IN (F2.Friend, F3.Friend, [snip/] F8.Friend)
LEFT JOIN Table_2 as F2
ON T1.id = F2.id AND F2.Friend NOT IN (F1.Friend, F3.Friend, [snip/] F8.Friend)
LEFT JOIN Table_2 as F3
ON T1.id = F3.id AND F3.Friend NOT IN (F1.Friend, F2.Friend, F4.Friend, [snip/] F8.Friend)
[big snip/]
LEFT JOIN Table_2 as F8
ON T1.id = F8.id AND F8.Friend NOT IN (F1.Friend, F2.Friend, [snip/] F7.Friend)