0

私は奇妙な状況で立ち往生しています。こんなふうになります:

私は2つのテーブルを持っています。1 つは users と呼ばれ、すべてのユーザー/パスワードの詳細が含まれています。次に、userFiles と呼ばれる別のテーブルがあり、ユーザー ID と、彼が権限を持つファイルの fileID があります。

ここで、1 つのアカウントが複数のファイルに対する権限を持つことができ、複数のアカウントが 1 つのファイルに対する権限を持つことができることに注意してください。

したがって、基本的に、最初のテーブルには次のようなものがあります。

  1. ID: 1、名前: bob、パスワード: helloWorld
  2. ID: 2、名前: phil、パスワード: what'sUp?

表 2 では、次のように言います。

  1. uID: 1、fID: 67
  2. uID: 1、fID: 68
  3. uID: 1、fID: 36
  4. uID: 2、fID: 67
  5. uID: 2、fID: 68
  6. uID: 2、fID: 102

さて、ここで私がやりたいことは次のとおりです。

すべてのユーザーを選択したい! (この場合は両方!) また、他のテーブルを結合したいのですが、特定の fID を指定した行だけを結合したいのです!

たとえば、fID 67 でユーザーとユーザー権限を照会したい

私はこれを取得したい:

  1. ID: 1、名前: ボブ、パスワード: helloWorld、uID: 1、fID: 67
  2. ID: 2、名前: phil、パスワード: what'sUp?、uID: 2、fID: 67

そして、fID 102 の場合 (PHP コードで使用できる NULL 以外の値を指定しても問題ありません)

  1. ID: 1、名前: bob、パスワード: helloWorld、uID: NULL、fID: NULL
  2. ID: 2、名前: phil、パスワード: what'sUp?、uID: 2、fID: 102

これは私が使ってみたクエリです

SELECT * FROM users LEFT JOIN userFiles ON users.ID=userFiles.uID WHERE userFiles.fID = 102

ただし、このクエリは 1 つの行のみを返しますが、両方は必要ありません。

mySQL ソリューションを提供できない場合は、結果をフィルター処理して、PHP を使用して必要なもののようなものを取得できるように、私を助けてください...

ありがとうございます!

4

1 に答える 1

2

次のように、条件をWHEREからJOINに移動する必要があります。

SELECT * FROM users
LEFT JOIN userFiles ON users.ID=userFiles.uID AND userFiles.fID = 102

ファイルにアクセスできないユーザーの場合、users.IDフィールドのみがNULLになることに注意してください。flIDフィールドは引き続き入力されます。

後で参照できるように、WHERE条件は結果セット全体をフィルタリングしますが、JOIN条件は、結果セット全体で結合されるレコードのみをフィルタリングします(返される行の数には影響しません)。

于 2012-08-26T07:01:30.487 に答える