Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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_Join - Fatal编程技术网

Mysql 如何以有效的方式连接这三个表?

Mysql 如何以有效的方式连接这三个表?,mysql,database,join,Mysql,Database,Join,我有一个数据库设计,每个用户有一台机器,包含7个组件。每个组件都有一个级别。想想浏览器游戏,你必须升级不同的东西 下面是用户表中的图片。我需要从中取出一个用户行 将其与此表连接,该表将组件的列名称解析为ID 然后选择由匹配级别和与用户行匹配的ID组成的7列 用户表将有大量的行,因此连接必须在where子句之后完成 我从来没有真正研究过连接,但这里我有一个非常复杂的连接,我不知道从哪里开始。什么是合适的mysql查询,您能详细介绍一下它是如何工作的吗?这是一个学习项目,因此非常感谢对工作解决

我有一个数据库设计,每个用户有一台机器,包含7个组件。每个组件都有一个级别。想想浏览器游戏,你必须升级不同的东西

下面是用户表中的图片。我需要从中取出一个用户行

将其与此表连接,该表将组件的列名称解析为ID

然后选择由匹配级别和与用户行匹配的ID组成的7列

用户表将有大量的行,因此连接必须在where子句之后完成

我从来没有真正研究过连接,但这里我有一个非常复杂的连接,我不知道从哪里开始。什么是合适的mysql查询,您能详细介绍一下它是如何工作的吗?这是一个学习项目,因此非常感谢对工作解决方案的每一个提示

编辑:

下面是一个示例用例:

用户ID为3的用户已登录。他的ID行表示他的能量组件处于0级,cpu组件处于1级。解析这些名称,我们发现能量的组件ID为1,cpu的组件ID为3。我们将这些与upgrades表匹配,发现ComponentID为1且级别为0的组件的输出为15,而ComponentID为3且级别为1的组件的输出为8

+------+------+-----+----------+------+----+
|UserID|type  |level|level_name|output|etc.|
+------+------+-----+----------+------+----+
|3     |energy|0    |Knopfzelle|15    |... |
+------+------+-----+----------+------+----+
|3     |cpu   |1    |Register  |8     |... |
+------+------+-----+----------+------+----+
甚至可以删除用户列

Edit2:


多亏了这个问题下的所有评论,我决定检查我的数据库结构,并在出现新问题时开始新的问题。如果您有一个针对这个特定的“坏设计”用户案例的解决方案,我很乐意看到它,即使它是一个坏的实践。

需要更清晰的模式视图才能执行任何操作help@rjv你说的视野更清晰是什么意思,你能给我举个例子让我给你看看吗?表中的列对我来说毫无意义:)你在哪里把用户映射到机器?@kostrnor。我建议你重新考虑你的设计。您需要连接表来有效地进行查询。这个设计很糟糕。一旦连接表就位,进行正常连接应该不会有任何问题。不要担心连接在where-caluse之前,数据库会重新安排它们内部的工作方式,以获得数据的最佳方式。关键是在连接字段上有好的索引,这是当前设计所无法做到的,因为实际上你没有什么可以连接的。是的。。。就是这样。定义外键和(userId,componentId)的唯一性。