MySQL - Join multiple rows from other table as array
我无法弄清楚如何从第二个表连接多个行。 我尝试过使用GROUP_CONCAT,但我希望将它们显示为数组(参见下图中的绿框)
这里的主要问题是来自气道柱的1,2,4。 我真的想避免使用第三个表来将两个表连接在一起。 我理解数组很难存储在MySQL中,但是有一些神奇的方法可以从下表中获得所需的信息吗?
我希望我有一些代码,但我迷失了。 非常感谢指针!
-
@sagi我认为对象符号是偶然的。她提到她想要一个阵列。
-
说实话,这只是伪代码。我希望它能在PHP中得到这个结果,但显然这不应该太重要
-
将气道ID存储在逗号分隔的字符串中并不是特别有用。更好的是有一个单独的"加入"表,它将气道id与城市id相关联
-
og_city是一个mysql表?
-
@Strawberry Yup!
-
@RobinZigmond我明白了,这就是我试图避免的。我有许多像气道这样的桌子,而且要有第三张桌来连接这两张桌子会有很多工作要做。
-
确定,您可以在PHP中编写代码 - 拉回"气道"字符串,将其拆分为数组,然后将其作为单独的查询以使用这些ID拉回气道行。这只是一些额外的工作和额外的查询,如果你有适当的表结构,你只需要一个带有几个连接的查询。
-
如果您真的不想拥有第三个表,除了id之外,每个城市都应该有一个唯一的标识符,并且每个气道都有一行具有该唯一城市标识符。有了这个,您可以使用标识符获取所有城市行,并进行第二次调用以获取所有气道。为了避免多行和多次调用,我们必须使用第三个表:)
-
@SunilChakravarthy这很有道理!我不认为这可能是诚实的,但它会节省我很多时间。你能把它作为答案,我可以接受吗? :)
-
@RobinZigmond正确的表结构如3表? (一张表只是将两者连在一起)
-
@Tompina - 是的。 (我应该提醒我,我不是一个数据库/ SQL专家 - 但这种结构是我习惯的,它肯定会使查询更容易!)
-
@Tompina如果你不能规范化表格。寻找FIND_IN_SET()功能
-
这比你目前使用它的烂摊子要少得多。
-
@Tompina请查看下面给出的答案stackoverflow.com/a/52741981/2520628
你实际可以做的是,使用FIND_IN_SET。 下面给出一个简单的查询:
1 2
| 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,曼谷id为2)。 此查询将输出:
然后可以使用json_encode将其转换为JSON(作为所需的输出)
作为旁注,如果可能的话,您应该真正期待规范化数据库。 它违反了第一种常规形式,并且还有更多的副作用,你可以在这里查看
-
这很完美! 一个问题,目前只是返回城市名称(曼谷)。 我的实例有大约20列。 这会慢慢降低性能,还是应该让第三个表连接其他两个? 万分感谢!
-
@Tompina我认为它不会减慢查询的速度,但如果可能的话,你应该规范化表格。 或者如果你能提供一些真实的例子,我可以测试和优化查询
-
得到它了! 这就是我需要知道的全部:)感谢您的快速解释!