2014-12-04 83 views
0

我堅持一個複雜的查詢,我需要實現一些業務邏輯。下面是我在(我省略額外列readabality)複雜SQL查詢與業務邏輯

Team - TeamID, TeamName 
TeamMember - MemberID, TeamID, MemberName 
Question - QuestionID, CategoryID, DifficultyLevelID, Question 
Category - CategoryID, CategoryName 
DifficultyLevel - DifficultyLevelID, DifficultyLevelName 
QuestionOffered - QuestionOfferedID, QuestionID, OfferedTo 

現在,業務邏輯是,我有10個類別的表(如科學,歷史,地理等)和3個難度級別(即簡單,中等,堅硬)。每個類別和難度級別有5個問題。

所以3 x 5 =每個類別15個問題(5個簡單,5箇中等,5個難度)。總計15 x 10(類別)= 150個問題。

現在我希望每次有用戶進來時,我都會檢查我是否已經提供(可以從QuestionsOffered表中追蹤)所有在該類別和難度級別下的5個問題,如果是,那麼我不會再次顯示類別和難度級別。

所以,說我第一次來我會得到所有的類別,然後選擇一個類別,我會得到所有的難度級別。現在我選擇Easy並繼續。因此,在每個類別下,我可以選擇一個特定難度等級5次,之後我會完成所有5個簡單操作,然後獲得類別和其他難度級別(即Medium和Hard)。這樣,如果我在同一類別下完成了所有5個簡單,5箇中等和5個難題,那麼這個類別本身就不會顯示出來。

Ofcourse我可以在編程中實現這個邏輯來填充類別,但最終會有許多代碼行。

那麼有什麼辦法可以在SQL中檢查這個業務邏輯嗎?這樣我就可以獲得數據來填充?

回答

0

內部加入你的問題,類別和水平在一起,然後離開加入已提供的問題。過濾提供的問題表中的任何字段爲空,並且您將有未回答的問題列表?也許?

+0

那麼,我錯過了一件事,我正在實施的測驗是一個團隊的基礎。所以說我團隊的任何成員都會耗盡一個類別或難度級別,所以其他任何團隊成員都不會獲得該類別或級別。 @Jeremy,你說的話對我來說不是很清楚。因爲,當我想填充某個類別時,我想檢查該團隊是否有該行的15行(表格提供的表格)。如果不是,那意味着團隊沒有耗盡整個類別,所以我會填充它。 – 2014-12-08 16:25:55

+0

接下來,當成員選擇一個類別時,對於填充級別,我將檢查是否對於該團隊的每個級別都有5行,如果不是,則可以填充它。 希望是有道理的。但我的問題是我怎樣才能實現這個使用查詢? – 2014-12-08 16:26:36