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查询执行什么操作,以便一切按照您的预期运行,检查我的答案并让我知道它是如何运行的。有人愿意分享为什么这被否决了吗?我认为这是一个很好的回应,他涵盖了所有的基础。另一个用户有一个简短的评论,被否决了,所以我怀疑这是报复。谢谢你的支持。我认为这是一条路要走。我将尝试一下,看看它如何影响性能。