2011-10-10 80 views
1

我試圖讓MySQL查詢給我相關數據2張表。因此,一個用戶可以訪問2個項目,總共有3個帖子(「流」)。實質上,我想要在project_users中獲得關聯的項目,然後獲取與這些項目關聯的帖子。3個表中的MySQL查詢

的數據看起來像這樣:

表1:用戶(1個使用者通過 'ID' 標識)

表2:project_users(用戶用2個項目在這種情況下相關聯)

表3:流(附職位,以不同的項目,但我要根據我的測試數據集得3)

我(打破)查詢看起來是這樣的:

SELECT U.`id`, P.`kf_users`, P.`kf_projects`, S.`kf_projects`, S.`body` 
    FROM users U 
    LEFT JOIN projects_users P ON U.`id` = P.`kf_users` 
    LEFT JOIN stream S ON P.`kf_users` = S.`kf_projects` 
    WHERE U.`id` = 1 

我究竟在想什麼?我嘗試了子查詢,但它不會讓我有多行,使它在我擁有的形式中無用。

謝謝!

+0

是'WHERE'子句中的'U.kp_user'正確的列(不應該只是'U.id')? (我沒有模式,所以這只是一個猜測。) –

+0

對不起,是一個錯字。但仍然沒有運氣! –

+0

您需要提供架構。查詢如何中斷? – Pepe

回答

2

我沒有得到任何結果,任何時候,我嘗試此查詢

真的嗎?然後嘗試將其更改爲:

SELECT * 
FROM users U 
WHERE id = 1 

我懷疑這會給你沒有結果。知道這個查詢也失敗了,希望能夠幫助你更快找到問題(你沒有一個id爲1的用戶)。

注意:如果這給你一個結果,那麼上面用LEFT JOIN發佈的查詢也應該返回一些行,因爲添加一個LEFT JOIN不應該刪除任何行。


更新:嘗試添加別名,使列名唯一:

SELECT 
    U.id, 
    P.kf_users, 
    P.kf_projects AS p_kf_projects, 
    S.kf_projects AS s_kf_projects, 
    S.body 
FROM .... 
+0

肯定會得到你給出的查詢結果。我也加入到了projects_users表中並得到了結果。 (SELECT U.'id',P.'kf_users',P.'id' FROM users U LEFT JOIN projects_users P ON U.'id' = P.'kf_users' WHERE U.'id' = $ id)但是它如果我使用上面發佈的原始查詢,仍然不會給出任何結果。 –

+1

@Rylan Dirksen:添加一個LEFT JOIN不會刪除行。必須有錯誤。你是否從PHP發送查詢?你檢查了mysql_query的返回值和(如果有必要)mysql_error嗎?你能發佈你的確切代碼嗎? –

+0

感謝您幫助我重新思考我的查詢。我從頭開始重建它,發現我從錯誤的表格中選擇。 –

0

所以我想通了,我做錯了什麼。我之前從用戶表加入,這是沒有必要的,因爲我的PHP腳本已經有用戶ID。

相反,我從projects_users表連接,並拿出給用戶表引用:

SELECT S.* 
    FROM projects_users P 
    LEFT JOIN stream S ON P.`kf_projects` = S.`kf_projects` 
    WHERE P.`kf_users` = '1'; 

...和它的工作就像一個魅力。感謝你的幫助!