簡體   English   中英

MySQL的新手,尋找多對多關系查詢

[英]New to MySQL looking for Many-to-Many relationship query

我有一些背景資料,代表了煉金術成分及其對天際的影響。 如果您不熟悉此方法,則可以結合2-4種成分制成葯水。 每種成分都有4種效果。 如果成分之間的效果相同,則將制成該類型的葯水。 我已將其確定為多對多關系,並按如下方式設置表格:

成分:ing_id(關鍵字),ing_name((其他補充信息)

效果:eff_id(鍵),eff_name

ing_eff_xref:eff_id,ing_id

我想輸入2種或更多可用成分並返回可能的組合,但不知道其作用是什么。 我的SQL經驗幾乎僅限於phpmyadmin和簡單的選擇查詢。 我想我的問題是:這是為這種類型的關系構建表的正確方法嗎?如果我不打算更新表,是否需要設置外鍵?是否存在可以使用一組查詢的查詢? ing_names並僅返回相交的eff_name?

如果有人感興趣,這是數據庫的mysqldump: http : //dl.dropbox.com/u/59699040/alchemy_db.sql

這是為這種類型的關系構建表的正確方法嗎?

是的,但是您不必在成分表上具有effect1到effect4。

如果我不打算更新表,是否需要設置外鍵?

是。 獲得所需數據的唯一方法是將三個表聯接在一起。 如果沒有外鍵(或更具體地說,是適當的索引),那么在查詢上可能無法很好地執行。 當然,您的總體上確實有少量的行,但是在這種情況下,使用外鍵是一個好的做法。

是否有一個查詢可以接受一組ing_names並且僅返回相交的eff_names?

我認為您正在追求這樣的事情:

SELECT e.eff_name
FROM ingredients i
INNER JOIN ing_eff_xref ie ON ie.ing_id = i.ing_id
INNER JOIN effects e ON e.eff_id = ie.eff_id
WHERE i.ing_name = 'Abecean Longfin ';

如果需要查看多種成分的效果,可以調整WHERE子句,如下所示:

WHERE i.ing_name IN ('Abecean Longfin ','Eye of Sabre Cat ','Bear Claws ');

您可能不需要重復的效果,因此可以執行SELECT DISTINCT消除這些效果。

天際中可以疊加葯水效果嗎? 如果它們可以堆疊,則可以使用COUNT進行GROUP BY查詢,以獲取每個效果的堆疊值:

SELECT e.eff_name, count(*) as value
FROM ingredients i
INNER JOIN ing_eff_xref ie ON ie.ing_id = i.ing_id
INNER JOIN effects e ON e.eff_id = ie.eff_id
WHERE i.ing_name IN ('Eye of Sabre Cat ','Bear Claws ')
GROUP BY e.eff_name;

該查詢將列出6個效果,其值為1,“ Restore Stamina”的值為2。不確定Skyrim葯水是否以此方式工作,但這只是一個額外的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM