【问题标题】:Mysql - Multi selection with a single queryMysql - 单个查询的多选
【发布时间】:2019-09-23 22:48:58
【问题描述】:

我有一张存放活动的桌子。前端将所有事件显示为卡片。一个事件,一张卡片。我还有一个包含订阅的表。一个事件,许多订阅。

有没有办法通过单个查询检索所有事件及其所有订阅?

目前,我进行查询以获取所有事件,然后运行循环并为每个事件运行查询以获取其订阅。因此,随着事件数量的增加,子查询(和数据库连接)的数量也会增加。这就是为什么我想知道是否可以将其减少为单个查询。

event                     subscription
+----------+              +------------+
id                        id
name                      user
location                  age
date                      event_id

... ...

试图让我的问题更容易:P

为了简化它,想想 Facebook 帖子。 Facebook 会显示该帖子和所有喜欢它的用户,对吧?那么,有没有办法将所有帖子和所有喜欢每个帖子的用户名放在一个查询中?

【问题讨论】:

  • 如果您正在寻找一个简单的连接,那么 GMB 有一个解决方案,或者您是否试图让它只有一个事件行包含所有订阅数据,那么这将是一个不同的设置。
  • 为了确认下面的答案,您的订阅表中有event_id吗?
  • @Ibu 是的,有。
  • 您计划如何显示结果会产生很大的不同。
  • 简单示例:我有事件 A 和事件 B。事件 A 有 2 个订阅。事件 B 有 3 个订阅。我想要一个查询,它将为我带来所有事件和每个事件的所有订阅。然后,我会显示如下:Event A => 1st subscription data => 2nd subscription dataEvent B => 1st subscription data => 2nd subscription data => 3rd subscription data

标签: mysql arrays join


【解决方案1】:

您似乎正在寻找一个简单的JOIN。假设表subscription 中的event_id 列映射到eventid,则如下所示:

SELECT e.id, e.name, e.location, e.date, s.id, s.user, s.age
FROM event e
INNER JOIN subscription s ON s.event_id = e.id

【讨论】:

  • 不就是一对一关系的表之间的JOIN吗?
  • 不,联接可以有一对多的关系。 INNER JOIN 只是说明您希望事件和订阅之间存在关系。如果理论上可以在没有订阅的情况下实现偶数,请改用LEFT JOIN
  • 我更新了问题,试图让自己更清楚
  • @RodrigoOlivares:就问题而言,此查询将满足您的期望。我建议您根据实际数据对其进行测试,并让我们知道您获得的结果是否符合您的预期。
  • 好的,我试试看。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2014-05-08
  • 1970-01-01
  • 2019-07-06
  • 2019-01-12
  • 1970-01-01
相关资源
最近更新 更多