2012-08-26 68 views
0

我陷入了一個奇怪的境地。它是這樣的:艱難的mySQL select查詢

我有2個表格。一個被稱爲用戶,其中有我所有的用戶/密碼的詳細信息,然後我有另一個名爲userFiles的表,其中有一個用戶ID和文件ID,他有權訪問的文件。

現在請注意,1個帳戶可以擁有多個文件的權限,多個帳戶可以擁有1個文件的權限。

所以基本上,第一臺都有,說:

  1. ID:1,名稱:鮑勃,密碼: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(即使它給NULL以外的值,即我可以在我的PHP代碼中使用,沒關係)

  1. ID:1,名稱:鮑勃,密碼:的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 

然而,這個查詢只返回一行試一下查詢,而我wan't兩者。

如果你不能給我一個MySQL的解決方案,試圖幫助我,讓我可以過濾掉的結果,並獲得像什麼,我想用PHP ...

由於一噸!

+0

在循環中嘗試mysqli :: fetch_array。 fetch_array一次只返回一個。 – Shane

回答

2

您需要的條件移動從哪裏來的JOIN,像這樣:

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

只能勸users.ID字段爲空值沒有訪問該文件的用戶誰 - flID字段仍將填充。

爲了將來的參考,WHERE條件過濾整個結果集,而JOIN條件只過濾在整個結果集上加入的記錄(不影響返回行數)。

+0

謝謝!我實際上能夠通過從用戶中選擇所有內容來解決它,然後使用php來查看mysql_num_rows(mysql_query(「SELECT * FROM userFiles WHERE uID = 1 AND fID = 102」))> 0或不。它的工作非常完美。 儘管如此,您的答案可能會在稍後有所幫助。 XD –

+0

您會發現效率降低至少一個數量級。 – Gutza