Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在一个查询中从多个不同的表中选择数据_Mysql_Database_Database Table - Fatal编程技术网

MySQL在一个查询中从多个不同的表中选择数据

MySQL在一个查询中从多个不同的表中选择数据,mysql,database,database-table,Mysql,Database,Database Table,我有一个用户数据库,其中有一个包含姓名、地址等的主表。然后,我为用户的孩子、宠物、培训课程和教育结果等创建了单独的表 这些用户详细信息都可以显示在同一页面上,我目前的做法是首先查询数据库中的用户主要详细信息。然后我分别查询其他表,并用循环显示这些信息 我真的只需要知道这是否是最好的方法,或者是否有一种使用单个查询的方法,以及是否有任何优势 表的基本结构是: +----------------+ +-----------------------+ | Users |

我有一个用户数据库,其中有一个包含姓名、地址等的主表。然后,我为用户的孩子、宠物、培训课程和教育结果等创建了单独的表

这些用户详细信息都可以显示在同一页面上,我目前的做法是首先查询数据库中的用户主要详细信息。然后我分别查询其他表,并用循环显示这些信息

我真的只需要知道这是否是最好的方法,或者是否有一种使用单个查询的方法,以及是否有任何优势

表的基本结构是:

+----------------+    +-----------------------+
| Users          |    | Children              |
+----------------+    +-----------------------+
|ID |Name |Age   |    |ID |UserRef |Name |Age |
+----------------+    +-----------------------+
|1  |Jim  |53    |    |1  |1       |Joe  |11  |
|2  |Karl |37    |    |2  |1       |Jane |9   |
+----------------+    |3  |2       |Amy  |15  |
                      +-----------------------+
这是一个基本版本,仅显示用户和子表。其他表与子表类似,因为它们引用用户表,并且为单个用户提供多条记录


提前感谢。

这里有一个很好的查询:

SELECT * FROM Users RIGHT JOIN Children ON Users.ID = Children.UserRef
请注意,这将提供两个名为Name的值,这就是为什么需要使用别名:

SELECT Users.Name as ParentName, Children.Name as ChildName FROM Users RIGHT JOIN Children ON Users.ID = Children.UserRef
您可以使用上述格式添加所需的任何其他字段


至于使用这种方法是否更好,每种方法都有其优缺点。当您创建一个包含更大、更高级查询的脚本时,该脚本可以执行您想要的操作,而不是执行许多较小的查询,您的脚本将运行得更快,因为不会有1+个父查询往返于服务器,而只会有一个查询。但是,组织不良的查询可能会在以后重新使用时导致调试问题,并且不记得为什么要这样做。

您可以在users.id=children.userref上对表进行简单的左联接。然而,由于这是一对多的关系,你需要使用一些魔术小组:

选择users.*,GROUP_CONCAT children.id ORDER BY children.id ASC AS childrens_id,GROUP_CONCAT children.name ORDER BY childrens.id ASC AS childrens_age FROM users LEFT加入users上的childrens.id=children.userref GROUP BY childrens.userref


然后必须使用代码解析/分解孩子的ID、姓名和年龄。尽管如此,这并不一定是你应该做的事情。MySQL端的速度不一定更快,而且您可以看到在后端代码中需要做多少额外的工作。我的建议是尝试一下,看看它如何影响你的表现。

把你的问题弄清楚一点,然后分享你想要的结果。这真的很简单。我建议您首先写下哪些列有问题,以及它们属于哪个表。然后写下您希望最终结果表的输出。了解输入和输出后,您就可以形成并编写一条SQL语句,以提供所需的输出。在编写语句之前,您首先需要确切地知道您希望SQL查询执行什么操作,以便一切按照您的预期运行,检查我的答案并让我知道它是如何运行的。有人愿意分享为什么这被否决了吗?我认为这是一个很好的回应,他涵盖了所有的基础。另一个用户有一个简短的评论,被否决了,所以我怀疑这是报复。谢谢你的支持。我认为这是一条路要走。我将尝试一下,看看它如何影响性能。