2011-04-29 161 views
0

我正在構建一個PHP5應用程序,我需要列出其中的項目以及關於它們的所有相關信息。爲此,我有三個表格,分別命名爲:kc_projects,kc_project_memberskc_users。我有ID的所有的人,並有各行中kc_project_members列連接各自的用戶,他在註冊項目做一個查詢:最好的方法是什麼?

現在,我有這個疑問:

SELECT * FROM kc_projects AS p 
INNER JOIN kc_project_members AS pm 
ON pm.PROJECT_ID = p.ID 
INNER JOIN kc_users AS u 
ON u.ID = pm.USER_ID 

但它不能按我的意願工作,因爲它實際上是檢索我想要的結果,但不是按照我想要的方式。它創建一個數組,另一個數組,並在該數組中,我有另一個數組包含查詢結果。它也爲我創建了每個用戶的重複結果,這意味着如果我只有一個用戶在該項目中註冊,它只會返回一個項目。但是如果我有更多的東西,它會像註冊用戶那樣返回我的數組,並且數組總是具有相同的項目信息。我希望他只返回一個項目,並在其中包含一個包含用戶的數組。

有沒有辦法做到這一點,正確的方式?

感謝,
灼燒

+0

你想要的輸出目前尚不清楚。您可以在單個結果集中執行此操作,這可能會複製用戶和項目信息,也可以通過執行多個查詢並將結果集關聯到您的PHP代碼中來分解數據。你要哪個? – Thomas 2011-04-29 18:45:16

+0

查詢不會爲您創建數組,這是在PHP端完成的。所以如果你對數組的佈局不滿意,那是因爲你的代碼構建錯了。 – 2011-04-29 19:02:40

+0

爲「陣列問題」檢查您正在使用的庫或函數來執行結果和檢索結果,檢查文檔中的「獲取模式」大多數庫可以處理多種獲取模式,關聯,組合等,選擇你的。 – regilero 2011-04-29 19:11:25

回答

0

我假設由數組你的意思是導致套...

是 - 這是可能的,但可能並不完全如你想象的那樣,因爲所有結果集必須具有相同的列數,如果您說... 2個項目成員用於項目ID爲1和5個項目成員用於項目ID爲7的項目成員。

您必須指定你想要返回哪一列 - SELECT *不會這樣做訣竅(無論如何,這是一件壞事,特別是如果需要良好性能的話)。而且,用戶的ID,用戶名或任何需要爲每個項目引用用戶獲取的列都必須連接成一個字符串,您應該稍後使用PHP進行解析。

下面是一個例子:

SELECT p.ID, p.PROJECT_NAME, GROUP_CONCAT(u.USERNAME SEPARATOR ',') AS PROJECT_MEMBERS 
FROM kc_projects p 
    JOIN kc_project_members pm ON p.ID=pm.PROJECT_ID 
    JOIN kc_users u ON pm.USER_ID=u.ID 
GROUP BY p.ID; 
+0

我遵循了您的建議,但我只使用了兩個查詢,而不是僅僅一個查詢。在第一個項目中,我得到了這些項目,它的成員ID是一串字符串,第二,我得到了列出項目中所需的成員。所以我不需要爲每個項目創建一個查詢,並且它可以按我的需要工作。 :) – 2011-04-30 18:28:22

相關問題