【问题标题】:MySQL - Join multiple rows from other table as array [duplicate]MySQL - 将其他表中的多行作为数组连接[重复]
【发布时间】:2019-03-15 10:45:57
【问题描述】:

我无法弄清楚如何从第二个表中连接多行。我尝试过使用GROUP_CONCAT,但我想将它们显示为一个数组(见下图中的绿色框)

这里的主要问题是airways-column 中的1,2,4。我真的想避免有第三张表只是为了将两个表连接在一起。我知道数组很难存储在 MySQL 中,但是有没有一些神奇的方法可以从下表中获取所需的信息?

我希望我有一些代码,但我在这里迷路了。非常感谢指点!

【问题讨论】:

  • @sagi 我认为对象符号是偶然的。她提到她想要一个数组。
  • 老实说,这只是伪代码。我希望它在 PHP 中产生这样的结果,但显然这无关紧要
  • 像这样以逗号分隔的字符串存储气道 ID 并不是特别有用。最好有一个单独的“加入”表,将航空公司 ID 与城市 ID 联系起来
  • og_city 是 mysql 表吗?
  • @Tombina 请检查下面给出的答案stackoverflow.com/a/52741981/2520628

标签: php mysql pdo


【解决方案1】:

您实际上可以做的是,使用FIND_IN_SET。下面给出一个简单的查询:

SELECT c.name AS city_name, a.name AS airway_name, a.rating AS airway_rating
FROM og_city AS c JOIN og_airway AS a ON FIND_IN_SET(a.id, c.airways) WHERE c.id = 2

在这里,您将 id 传递为 2,这将有助于选择飞往曼谷的航班(og_city,Bangkok id 为 2)。此查询将输出:

然后可以使用 json_encode 将其转换为 JSON(作为您想要的输出)

附带说明,如果可能的话,您应该非常期待对数据库进行规范化。它违反了first normal form,还有很多副作用,你可以查看here

【讨论】:

  • 这很完美!一个问题,目前它只是返回城市名称(曼谷)。我的真实示例大约有 20 列。这会大大降低性能,还是我应该使用第三张表来连接另外两个表?非常感谢!
  • @Tombina 我认为它不会减慢查询速度,但如果可能的话,你应该规范化表格。或者如果你能提供一些真实的例子,我可以测试和优化查询
  • 知道了!这就是我需要知道的一切:)感谢您的快速解释!
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多