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



我有一个表带有对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']."
";



简短的代码,让你明白我的意思:

FILE表有gebruikersidempid,前者是文件的上传者,后者必须链接此文件。(均为gebruiker.gebuikersid的FK).

例如,我的数据库中有:

fileid  filename    filesize    filepath           custid   empid   gebruikersid    filedescription
228     Test.         60    files/employees/113/    NULL     113    70  

所以我基本上是在尝试两个参考:

当我通过f.empid内部加入时,我希望能够返回f.empid & gebruiker.gebruikersid引用的username,同时我希望能够恢复f.gebruikersid & gebruikers.gebruikersid引用的username,所以我可以返回的是:

user X的文件列表:
File A,由user Y上传
File B,由user Z上传
等等…

现在我得到了:
user X的文件列表:
File A,由user X上传
File B,由user X上传
即使数据库中的一切都很好。

EDIT由于我以前有一个员工表(现在所有员工都是用户),我的代码名都搞砸了,这可能会有点困难,对不起。一旦我能继续前进,就需要弄清楚这一切。

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

例如:

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,那么这段脚本将不会返回任何内容。

相关内容

最新更新