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,那么用户(如果两者都没有)会显示一个通用文档存储