2011-04-05 76 views
0

這種情況很難解釋,但我會盡我所能。數據庫中的多個連接

對於學校,我們必須創建一個Web應用程序(用PHP編寫),它允許教師管理學生的項目,並允許他們進行同伴評估。由於學生人數衆多,每個項目都有多個項目組(當然,你只應該評估你自己的小組成員)。

我databasestructure看起來像這樣的時刻:

用戶:包含所有用戶的信息(user_id是主要的)
表:項目:包含PROJECT_ID,名稱,描述和開始日期。

到目前爲止,這很容易。但現在變得更加困難。

:包含group_id,groupname,作爲一個組特定於項目,它也包含project_id。
groupmembers:一個組包含多個用戶,但用戶可以在多個組中(因爲他們可以在多個項目中處於活動狀態)。所以這個表格包含一個user_id和一個group_id來鏈接這些。

最後,管理員可以決定用戶何時需要進行對等評估以及他們有多少時間進行評估。因此,最後一個表評估包含一個evaluation_id,一個開始日期和一個結束日期以及一個project_id(實際評估存儲在第六個表中,這與現在不相關)。

我認爲這是一個很好的設計,但是當我真的需要使用這些數據時會變得更加困難。我想顯示一個評估列表,你仍然需要填寫。你知道的唯一的事情就是你的user_id,因爲它存儲在會話中。

所以必須這樣做:
1)在groupmembers上運行查詢以查看用戶在哪個組中。
2)使用此結果,對組運行查詢以查看這些組與哪些項目相關。
3)現在我們知道用戶所在的項目,應該查詢評估表以查看是否有正在進行的項目評估。
4)現在我們知道哪些評估是可用的,但現在我們還需要檢查第六個表,以查看用戶是否已完成此評估。

所有這些步驟都依賴於對方的結果,所以它們應該都包含自己的錯誤處理。一旦用戶選擇了他們希望填寫的評估(評估ID將通過GET發送),將需要運行許多新的查詢以檢查該成員在他的組中有哪些用戶並且將必須評估並且另一個支票看看哪些其他小組成員已經被評估過)。

如您所見,這是相當複雜的。包括所有錯誤處理,我的腳本將是一個真正的混亂。有人告訴我一個「觀點」可能有助於這種情況,但我不明白爲什麼這會幫助我。

有沒有很好的方法來做到這一點?

非常感謝!

+0

看起來像你有依賴到另一個。 INNER JOIN不會解決問題,看看這篇文章 - > http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx – B4NZ41 2011-04-05 17:45:24

+2

你試過了什麼? – Cfreak 2011-04-05 17:45:58

+0

謝謝你的鏈接,我會看看。我試圖按照我提到的步驟,但它非常非常混亂,所以我創建了這個線程。 – Bv202 2011-04-05 17:47:35

回答

1

您在程序上也在考慮。

你所有的條件都應該很容易地被輸入到sql語句的where語句中。

您將最終得到一個待評估項目的列表。只有一個列表,只有一組錯誤處理。

0

不確定這是否正確,但嘗試這種基本方法。我沒有針對實際的數據庫運行此操作,因此可能需要調整語法。

select p.project_name 
from projects p inner join evaluations e on p.project_id = e.project_id 
where p.project_id in (
select project_id 
from projects p inner join groups g on p.project_id = g.project_id 
inner join groupmembers gm on gm.group_id = g.group_id 
where gm.user_id = $_SESSION['user_id']) 

此外,你需要確保使當查詢的一部分,你正確地逃脫你的user_id,但是這是一個整體的其他話題。