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  

だから私が基本的にしようとしているのは、2つの参照を持つことです:

私が内部結合しているとき、参照f.empidの を返すことができるようにしたいと同時に、参照の を返すことができるようにしたいので、返すことができるものは次のようになります。usernamef.empid & gebruiker.gebruikersidusernamef.gebruikersid & gebruikers.gebruikersid

のファイル リストuser X:
File A、によってアップロードされましたuser Y
File B、によってアップロードされましたuser Z
等々...

今私は得ます:
のファイルリストuser X:
File A、によってアップロードされましたuser X
File B、によってアップロードされましたuser X
データベースに問題がない場合でも。

編集以前に従業員テーブルがあったため (現在はすべての従業員がユーザーです)、コード名がめちゃくちゃになっています。申し訳ありませんが、少し難しいかもしれません。先に進むことができたら、これをすべて理解する必要があります。

4

2 に答える 2

3

同じテーブルに複数回参加する場合は、少なくとも 1 つのインスタンスにエイリアスを使用する必要があります。次に、エイリアスを使用して、テーブルから選択したすべてのフィールドにプレフィックスを付ける必要があります。

例えば:

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

上記の回答には同意しますが、各結合で gebruikers を g1 と g2 に置き換える必要があります。そして、私にとっては、内部結合を外部結合に置き換える方が良いでしょう。なぜなら、empid がテーブルで null になる可能性がある場合、このスクリプトは何も返さないからです。

于 2012-12-11T13:34:38.530 に答える