0

我正在尝试将两个表中的数据加入 1 行,但我似乎无法弄清楚如何实现这一点。

表1结构

id, name, number,email

表2结构

id,friends

事情在表 1 中,id 是唯一的,而在表 2id中不是,他可以有很多朋友。(这只是例子)。

我试图让一行看起来像这样

id, name, number, email,等friend[1]_friend[2]

有什么想法可以实现这一点,或者我是否需要更改我的数据库结构才能获得此结果?

*注意(他只能选择 8 个不同的朋友)。

4

2 回答 2

0

您是否考虑过实施 group_concat?(http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/

不管每个用户只有 8 个朋友这一事实,基于连接行生成列都不是实用/有效的解决方案。

于 2013-09-14T19:25:08.487 回答
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)
于 2013-09-14T22:51:51.260 回答