php - MYSQL 单个查询既可以从一个表中检索单行,也可以从另一个表中检索多行作为单个字段

标签 php mysql

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

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

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

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

因此,我使用另一个名为 event_rooms 的表将房间与事件表分开。该表由

id
event_id
room_id

对于事件所在的每个房间,我都会在该表中放入多行。 这解决了应用程序中的许多问题,理想情况下我希望保持这样。

因此,谈到我正在尝试解决的问题,是否可以通过单个查询来获取事件表行以及事件所在的所有房间?让我可以简单地创建包含事件列表的事件表。

事件表很简单,基本上

-id
-event_name
-event_date
-notes

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

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

最佳答案

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

有两个查询:

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

但正如 Strawberry 所评论的,这是我推荐的任何基本 mysql 教程中都会涵盖的内容 http://www.w3schools.com/sql/作为一个好的起点。

关于php - MYSQL 单个查询既可以从一个表中检索单行,也可以从另一个表中检索多行作为单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100409/

相关文章:

PHP:如何对字符串中的字符进行排序?

MySQL OFFSET 与 WHERE 子句条件不起作用

php - 尝试使用 Symfony2 项目清除缓存时出错

php - 我们是否必须设计 config.php、database.php 和通用 php 文件,或者我们可以从 php 库使用它

java - 运行时 JDBC 程序中的 MySQLNonTransientConnectionException

c++ - 将 Arduino 变量值插入 MySQL 表

MYSQL:存储过程,插入一行,然后通过 LAST_INSERT_ID() 选择它

php - 是否可以将数据回显到文本框中或将这些数据保存在 MySQL 上?

php - 说 2 个数组中有多少项相同?

javascript - 正则表达式:嵌套标签