1

我有一个带有双外键引用的表,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.gebruikersid 的两个 FK)。

例如,我的数据库中有:

fileid  filename    filesize    filepath           custid   empid   gebruikersid    filedescription

228     Test.         60    files/employees/113/    NULL     113    70  

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

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

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

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

编辑因为我之前有一张员工表(现在所有员工都是用户),所以我的代号搞砸了,抱歉可能有点困难。一旦我可以继续前进,就需要弄清楚这一切。

4

2 回答 2

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']."
于 2012-12-11T13:26:03.097 回答
1

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

于 2012-12-11T13:34:38.530 回答