2014-02-28 120 views
0

我有一個項目,我需要爲學校。這是一款基於munchkin(棋盤遊戲)的Javafx遊戲。MySQL查詢和優化數據庫

我們有一個英雄,這個英雄會打敗一個房間裏的怪物,每個怪物捍衛一個寶藏(我把它看作怪物的戰利品,就像MMORPG一樣)。 現在我不知道怪物和寶藏之間的聯繫。 每個寶藏有0或1個怪物。每個怪物至少有一個寶藏,可以是多個。 老師說在我的情況下使用一個額外的表(Treasure_has_Monsters)。 我不知道該引用是正確的,雖然...

我的數據庫的那一刻: Database Design

現在我遇到的問題如下。 我需要從怪物的所有寶藏中獲得一個列表。 我可以查詢treasure_has_monster表並獲取所有編號爲 的編號,然後創建一個查詢以獲得所有編號的珍寶。

問題:

  • 有沒有辦法在一個查詢中這樣做嗎?
  • Treasures和怪物之間的關係是否正確?
+0

歡迎堆棧溢出怪物ID替換<MID>。我們要求提問者將他們問題的關鍵要素直接放入問題文本中。謝謝。 –

+0

有趣的是,有一個怪物和寶藏之間的連接表,但不是英雄和寶藏之間。 – railsdog

+0

@railsdog是的,那是因爲英雄表尚未使用。還沒有想太多。無論如何,據我所知,現在只會有一個英雄。我們在迭代中工作,一次完成一件。 – PieterJan

回答

0

根據您的模式,你可以嘗試:

select t.* from Treasures t 
join Treasures_has_Monsters tm on tm.Treasure_id=t.id 
where Monster_id=? 

在哪裏?是你想列出珍品的怪物身份證。

+0

非常感謝您的快速響應和幫助! – PieterJan

1

你可以嘗試做像一個簡單的查詢:

SELECT t.name 
FROM treasure_has_monster thm 
INNER JOIN trasures t ON (thm.trasure_id = t.id) 
WHERE thm.monster_id = YOUR_MONSTER_ID 
+0

只是打敗了我。 INNER JOIN與我的答案中的JOIN相同。 – NickJ

+0

工程就像一個魅力。非常感謝快速響應和幫助! – PieterJan

0

沒有理由將兩個表連接在一起。你可以使用一個簡單的內部查詢。

SELECT * FROM Treasures 
WHERE id IN (SELECT treasure_id from Treasures_has_Monsters 
      WHERE monsterid = <MID>); 

與你想獲得

+0

我認爲加入比較容易 – NickJ