Php 如果可能的话,如何将多个内部键连接到同一个表中,但连接哪些不同的外键?

Php 如果可能的话,如何将多个内部键连接到同一个表中,但连接哪些不同的外键?,php,mysql,reference,foreign-keys,Php,Mysql,Reference,Foreign Keys,我有一个双外键引用到gebruikersid的表,现在我有点乱了。首先,“gebruiker”在荷兰语中是“用户”,以避免误解 我现在使用的查询是: $uploadeditems = " SELECT * FROM file f INNER JOIN gebruikers g on f.empid = g.gebruikersid WHERE g.gebruik

我有一个双外键引用到
gebruikersid
的表,现在我有点乱了。首先,“gebruiker”在荷兰语中是“用户”,以避免误解

我现在使用的查询是:

$uploadeditems = "
                SELECT *
                FROM file f
                    INNER JOIN gebruikers g on f.empid = g.gebruikersid
                WHERE g.gebruikersid = ".$GET['employeeid']."
                ";
但我实际上需要做的是这样的:

        $uploadeditems = "
                        SELECT *
                        FROM file f
                            INNER JOIN gebruikers on f.empid = gebruikers.gebruikersid as 'gebruikers.employee'
                            INNER JOIN gebruikers on f.gebruikersid = gebruikers.gebruikersid as 'gebruikers.uploader'
                        WHERE gebruikers.employee= ".$GET['employeeid']."
                        ";


简要介绍一下代码,这样你就明白我的意思了:

表文件有
gebruikersid
,他是文件的上传者,还有
empid
,这个文件必须链接到他。(gebruiker的FK和gebruikersid)

例如,我的数据库中有:

fileid  filename    filesize    filepath           custid   empid   gebruikersid    filedescription

228     Test.         60    files/employees/113/    NULL     113    70  
所以我基本上是想得到两个参考资料:

当我通过
f.empid
进行内部连接时,我希望能够返回
f.empid&gebruiker.gebruikersid
引用的
用户名
,同时我希望能够返回
f.gebruikersid&gebruikers.gebruikersid
引用的
用户名
,所以我可以得到的回报是:

用户X的文件列表

文件A
,由
用户Y
上传
文件B
,由
用户Z
上传
等等

现在我得到:
用户X的文件列表

文件A
,由
用户X
上传
文件B
,由
用户X
上传
即使数据库中的数据都很好


编辑因为我以前有一个employee表(现在所有的员工都是用户),所以我的代码都搞乱了,这可能会有点困难。一旦我可以继续,就需要解决所有问题。

如果您多次加入同一个表,则至少需要为其中一个实例使用别名。然后,必须使用别名作为从表中选择的所有字段的前缀

例如:

SELECT f.*, employee.FIELD1 as e_FIELD1, uploader.FIELD1 as u_FIELD1 ...

FROM   file f

       INNER JOIN gebruikers as employee
       on f.empid = employee.gebruikersid

       INNER JOIN gebruikers as uploader
       on f.gebruikersid = uploader.gebruikersid

WHERE gebruikers.employee= ".$GET['employeeid']."

如果多次加入同一个表,则至少需要为其中一个实例使用别名。然后,必须使用别名作为从表中选择的所有字段的前缀

例如:

SELECT f.*, employee.FIELD1 as e_FIELD1, uploader.FIELD1 as u_FIELD1 ...

FROM   file f

       INNER JOIN gebruikers as employee
       on f.empid = employee.gebruikersid

       INNER JOIN gebruikers as uploader
       on f.gebruikersid = uploader.gebruikersid

WHERE gebruikers.employee= ".$GET['employeeid']."

我同意上面的答案,但是你应该在每个连接中用g1和g2替换gebruikers。
对我来说,最好用外部连接替换内部连接,因为如果表中的empid可以为null,那么这段脚本将不返回任何内容。

我同意上面的答案,但是在每个连接中,应该用g1和g2替换gebruikers。
对我来说,最好用外部联接替换内部联接,因为如果empid在表中为null,那么这段脚本将不返回任何内容。

问题是,您将有重复的字段名。您必须为字段添加别名以使其唯一。我将更新我的答案作为一个例子。是的,它有效!employee.*和uploader.*似乎也这么做了。该死,非常感谢,我需要这个!(可能在1分钟内接受)或不接受。。无论如何,谢谢,我需要进一步讨论这个问题。实际上,您可以使用SELECT*运行查询,但我不推荐使用它,因为字段名重复。问题是您将有重复的字段名。您必须为字段添加别名以使其唯一。我将更新我的答案作为一个例子。是的,它有效!employee.*和uploader.*似乎也这么做了。该死,非常感谢,我需要这个!(可能在1分钟内接受)或不接受。。无论如何,谢谢,我需要进一步讨论这个问题。实际上,您可以使用SELECT*运行查询,但我不推荐使用它,因为字段名重复。这一点很好。我确实把我的别名改成了更有意义的答案。g1和g2不太具有描述性。我测试得很好,到目前为止还不错。仍然使用内部联接。是的,返回NULl empid是好的,我使用的是1个文件表:如果设置了custid,那么客户显示了列表,如果设置了empid,那么用户,如果两者都没有,那么这是一个通用文档存储好的点。我确实把我的别名改成了更有意义的答案。g1和g2不太具有描述性。我测试得很好,到目前为止还不错。仍然使用内部联接。是的,返回NULl empid很好,我使用的是1个文件表:如果设置了custid,那么客户会显示列表;如果设置了empid,那么用户(如果两者都没有)会显示一个通用文档存储