2013-10-19 81 views
0

我需要想出一個查詢,我發現這個查詢有點複雜。在多個表上啓動MySQL查詢

這是我的數據庫結構:

enter image description here

用戶將添加/進入過濾器,並根據過濾器,會有雜誌和報紙的記者展示收藏。

可能的過濾器:

  • 雜誌/報紙名稱
  • 沒有fromdate
  • TODATE
  • 選擇,如果結果僅僅是從雜誌或報紙或兩者
  • 如果集合已被分析與否

那麼,假定用戶輸入了名稱,兩個日期,雜誌和報紙,以及僅分析了已收集的集合,查詢將如何?我想從日期到日期顯示collectionDate,報紙/雜誌的名稱。 我一直在試圖找出查詢,但我掙扎了一下。

有沒有人有建議?希望一切都清楚:)

謝謝!

+1

你有沒有試過要做的一段代碼? – kmas

+0

從圖片中我不清楚目標表與其他ID之間的ID是如何相關的;我把它作爲target.type將是'收藏','雜誌',或'報紙',然後是ssnID對應表的ID? –

+0

@Joe T,我試着突出顯示這些ID,所以它會更清楚。雜誌和報紙是目標的子類型(對不起,我不確定如何在MySQL Workbench上表示這一點)。因此,targetID將是報紙ID或雜誌ID(PK)。 ssnID對應於newspaperID或magazineID,但它們不用於此查詢。集合不是Target的子類型,但表集合具有targetID作爲外鍵,以識別哪些是與特定集合相關的目標 –

回答

1
SELECT m.name as mag_name, 
      n.name as news_paper_name, 
      c.fromDate, 
      c.toDate 
    FROM Collections AS C 

     INNER JOIN Target AS T ON 
     C.TargetID = T.TargetID 

     INNER JOIN Magazine AS M ON 
     T.TargetID = M.id 

     INNER JOIN Newspaper AS N ON 
     T.TargerID = N.id 

     INNER JOIN Analysis AS A ON 
     C.CollectionID = A.CollectionID 

這應該從連接的角度來工作。我認爲當某些事情被分析時有一個記錄在分析下,而不是在分析時有記錄。只需添加一個where子句和您想要過濾的任何信息即可。

+0

感謝您的回答,它確實幫助我記住了一些事情並澄清了其他事情。 –

+0

它只有一個問題。當我把m.name和n.name都給了我空集。但是,當我分別做每一個它的作品。你對如何解決這個問題有任何想法嗎? –

+0

我已經使用UNION解決了它。感謝大家 :) –