【问题标题】:How to get all data from 3 tables using a relationship/mapping table with foreign key如何使用具有外键的关系/映射表从 3 个表中获取所有数据
【发布时间】:2018-07-08 11:50:03
【问题描述】:

我有 2 个表,其中第三个映射表只有两个表的 ids(外键)。 有没有可能只用一个查询就得到这样的结果

╔═══════╦═══════╗
║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 代码中循环遍历结果,以列出用户及其所有数据一次,而不是多次列出用户拥有的数据。

【问题讨论】:

  • 阅读 MySQL GROUP_CONCAT 看看它是否适合你。
  • 到目前为止你尝试了什么???? SO 不是免费的编码服务。
  • @TheOneWhoMade 我手动输入了它们。第一个是我从另一页复制的。 @Eric我已经尝试了很多,我发布了这个以了解我是否有可能尝试做。我正在做的事情有更多的表格和关系。我已经得到了我想要的东西,只是它没有为每个用户返回一行。选择user 987654327 @,data 987654329 user user relation user 987654334 relation data 987654337 @ relation 987654338@ = data.data_id。如果你知道,回答它。你可以说它可能或不可能。
  • @PM77-1 谢谢你的工作。

标签: php mysql join inner-join


【解决方案1】:

你可以试试group_concat()

SELECT r.user_id, group_concat(d.data)
FROM relationship r
JOIN data d ON r.data_id = d.data_id
GROUP BY r.user_id;

【讨论】:

  • 谢谢你的实际工作!对于任何有兴趣的人。 SELECT user.user_id, group_concat(data.data) FROM user JOIN relationship ON user.user_id = relation.user_id JOIN data ON relation.data_id = data.data_id group by user.user_id。
猜你喜欢
  • 2020-01-06
  • 2020-04-14
  • 2014-08-11
  • 2019-01-06
  • 1970-01-01
  • 2012-11-23
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多