我有一个带有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.gebruikersid的FK)。
因此,例如我在我的数据库中:
fileid filename filesize filepath custid empid gebruikersid filedescription
228 Test. 60 files/employees/113/ NULL 113 70
所以我基本上尝试的是有两个参考:
当我在f.empid
内部加入时,我希望能够返回username
引用的f.empid & gebruiker.gebruikersid
,同时我希望能够返回username
引用的f.gebruikersid & gebruikers.gebruikersid
,所以我可以返回的内容就像:
user X
的文件列表:
File A
上传的user Y
File B
上传的user Z
等等...
现在我明白了:
user X
的文件列表:
File A
上传的user X
File B
上传的user X
即使它在数据库中都很好。
编辑由于我之前有一个员工表(现在所有员工都是用户),我的代码名称搞砸了,可能有点难过。一旦我继续前进,就需要弄清楚这一点。
答案 0 :(得分:3)
如果多次加入同一个表,则需要为至少一个实例使用别名。然后,您必须使用别名为从表中选择的所有字段添加前缀。
例如:
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']."
答案 1 :(得分:1)
我同意上面的答案,但你应该在每个联接中用g1和g2替换gebruikers。 对我来说,最好用外连接替换内连接,因为如果你的表中的empid可能为null,那么这段脚本将不返回任何内容。