如何使用带有外键的关系/映射表从3个表中获取所有数据

时间:2018-01-29 17:45:57

标签: php mysql join inner-join

我有2个表,第3个映射表只有两个表的id(外键)。 是否可以通过一个查询得到这样的结果

╔═══════╦═══════╗
║user_id║ data  ║
╠═══════╬═══════╣
║   1   ║ {a, c}║
╠═══════╬═══════╣
║   2   ║   b   ║
╚═══════╩═══════╝

Table users:
    user_id (pk, fk to relationship.userid)

Table data:
    data_id (fk to data.data_id)
    data

Table relationship:
    user_id (fk of user.user_id)
    data_id (fk of data.data_id)

这是一个示例数据

USER
+-------+
|user_id|
|-------|
|   1   |
+-------+
|   2   |
+-------+

RELATIONSHIP
+-------+-------+
|user_id|data_id|
+-------+-------+
|   1   |   1   |
+-------+-------+
|   1   |   3   |
+-------+-------+
|   2   |   2   |
+-------+-------+

DATA
+-------+----+
|data_id|data|
+-------+----+
|   1   | a  |
+-------+----+
|   2   | b  |
+-------+----+
|   3   | c  |
+-------+----+

使用连接查询,结果会为其拥有的每个数据重复user_id 与此How to get all data from 2 tables using foreign key

类似

问题在于我循环遍历我的php代码中的结果,列出用户拥有所有数据,而不是多次列出用户拥有的数据。

1 个答案:

答案 0 :(得分:0)

你可以试试group_concat() 选择r.user_id,group_concat(d.data) 来自关系r 在r.data_id = d.data_id上连接数据d r.user_id分组