【问题标题】:MySQL Many-to-Many QueryMySQL 多对多查询
【发布时间】:2014-07-08 15:59:04
【问题描述】:

我目前正在将游戏多人引擎的玩家保存功能转换为 SQL 数据库,用于集成网页以显示/修改/出售角色。原始系统将所有数据存储到文本文件中,这是一种处理这些数据的糟糕方式,因为它只固定在游戏中。在文本文件中存储了用户的用户名、密码、ID 和玩家数据,只允许一个字符。我已将其分成表格,并且可以成功保存和加载字符数据。我拥有的表格非常大,因此出于示例目的,我将使用以下表格:

帐户:

+----+----------+----------+
| ID | Username | Password |
+----+----------+----------+
|  1 | Player1  | 123456   | (Secure passwords much?)
|  2 | Player2  | password | (These are actually hashed in the real db)
+----+----------+----------+

account_character:

+------------+--------------+
| Account_ID | Character_ID |
+------------+--------------+
|      1     |       1      |
|      1     |       2      |
|      2     |       3      |
+------------+--------------+

字符:

+----+-----------+-----------+-----------+--------+--------+
| ID | PositionX | PositionY | PositionZ | Gender | Energy | etc....
+----+-----------+-----------+-----------+--------+--------+
|  1 |    100    |    150    |     1     |   1    |   100  |
|  2 |     30    |     90    |     0     |   1    |   100  |
|  3 |    420    |    210    |     2     |   0    |  53.5  |
+----+-----------+-----------+-----------+--------+--------+

这些表使用关系链接。

到目前为止,我所拥有的是,用户登录并且服务器查询他们的用户名并匹配密码。如果密码匹配,则服务器根据登录时从账户加载的ID开始加载字符数据。

这就是我卡住的地方。我已经使用 SQL 命令界面通过 phpmyadmin 成功完成了此操作,但是由于大约是凌晨 4 点,我很累,在保存命令之前不小心关闭了包含命令的选项卡。我试图复制它,但我根本无法获得查询中需要的数据。

我最近在大学完成了一门数据库课程并获得了优异的成绩,但在我的一生中,我无法让它再次发挥作用......我已按照教程进行操作,但由于情况通常与我的不同,我无法申请直到我理解它们。我知道一旦我有一个有效的命令,我就会踢自己。

Tl;dr - 我希望使用帐户的“ID”查询链接到帐户的所有字符数据。

【问题讨论】:

    标签: mysql sql database many-to-many relationships


    【解决方案1】:

    我认为这应该可行:

    SELECT
        *
    FROM
        account_character ac
        INNER JOIN account a ON ac.Account_ID = a.ID
        INNER JOIN character c on ac.Character_ID = c.ID
    WHERE
        account.Username = ? AND
        account.Password = ?
    ;
    

    我们首先将所有相关表连接在一起,然后过滤以获取当前用户的字符。

    【讨论】:

    • 非常感谢,我可以看到你是怎么做到的,现在可以成功获取字符了。 :)
    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多