【问题标题】:MYSQL Single query to retrieve both single row from one table and many rows as a single field from anotherMYSQL 单一查询从一个表中检索单行和从另一个表中检索多行作为单个字段
【发布时间】:2014-08-03 08:21:38
【问题描述】:

我怀疑为这个问题想出一个标题是多么困难,我想知道的是可能的,根本不可能。 但我绝不是 mysql 大师,所以就这样吧。

我目前正在重写我负责维护的应用程序。 它本质上是一个预订房间的活动管理系统。一个活动通常会有多个与之关联的房间。

在整个应用程序的不同部分中很常见的是必须列出一个事件表,其中包含一列中的房间以及其他事件信息。

目前,应用程序将房间存储为逗号分隔的 ID 号列表,例如。 1,5,7 我想对其进行规范化,以帮助解决目前由于这种安排而难以进行的其他查询。

所以我使用另一个名为 event_rooms 的表将房间与 events 表分开。该表由

id
event_id
room_id

我在这个表中为每个活动所在的房间添加了多行。 这解决了应用程序中的许多问题,理想情况下我希望保持这种状态。

因此,我想解决的问题是,我是否可以通过单个查询获取事件表行以及事件所在的所有房间?允许我创建包含事件列表的事件表。

事件表很简单,基本上

-id
-event_name
-event_date
-notes

这可能吗?或者我是否必须进行多个查询(一个页面上有 100 多个事件,我很想避免这种情况,因为这意味着每页有 101 个查询。

或者有没有我可能没有考虑过的整体更好的设计选择? 我正在使用 PHP,以防您的想法涉及应用程序代码。

【问题讨论】:

  • 任何关于 MySQL 的基础教程都将涵盖所有这些
  • @Strawberry 不幸的是根本不是这样,group_concat 没有出现在我阅读的书中,也没有我刚刚在网上查到的一些 sql 教程。我现在在文档中找到了它。
  • 我应该说'关于 PHP 和 mysql 的任何基本教程'。我不同意@Zen_silence 的解决方案。如果您使用的是 PHP,那么您不妨在那里进行所有的数组处理。此外,w3schools 通常对 SO (meta.stackexchange.com/questions/87678/…) 的评价很差。最后,GROUP_CONCAT 是 SQL 标准的 MySQL 扩展——这可能就是你的书中没有它的原因。

标签: php mysql


【解决方案1】:

我制作了一个 SQL Fiddle,我认为它可以解决您的问题: http://sqlfiddle.com/#!2/71c8d/4

有两个查询:

  • 第一个返回房间ID的逗号分隔列表
  • 第二个返回房间号的逗号分隔列表,因为我假设您也有一个房间表

但正如 Strawberry 所说,这是任何基本 mysql 教程都会涵盖的内容,我建议将 http://www.w3schools.com/sql/ 作为一个很好的起点。

【讨论】:

  • 谢谢那太好了,我从一本书中学到的关于mysql/sql的知识,那本书中没有关于group_concat的任何内容,w3school.com也没有(至少我能找到)我在官方文档中找到了它的想法..正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多