我有一个表带有对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表有gebruikersid
和empid
,前者是文件的上传者,后者必须链接此文件。(均为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,那么这段脚本将不会返回任何内容。