【发布时间】: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 扩展——这可能就是你的书中没有它的原因。