2010-07-08 39 views
1

比方說,我有我的分貝這些表:MySQL的動態JOIN

items 
categories 
weapons 
shields 
swords 

,我需要創建一個連接是這樣的:

SELECT items.*, {swords}.* 
FROM items 
INNER JOIN categories 
    ON categories.id = items.category_id # <-- here I know that the item is a sword 
INNER JOIN {swords} 
    ON {swords}.item_id = item.id 
WHERE items.id = 12 

{swords}部分是動態的,因爲我發現該項目是檢查categories.name字段。

查詢將發生變化,如果categories.name是「」這樣的:

SELECT items.*, shields.* 
FROM items 
INNER JOIN categories 
    ON categories.id = items.category_id 
INNER JOIN shields 
    ON shields.item_id = item.id 
WHERE items.id = 13 

我用{}swords各地來顯示它像一個變量

謝謝您的回答並對我的英語感到抱歉! :)

回答

1

從技術上講,您只能用動態SQL - 這意味着MySQL's Prepared Statement syntax或字符串連接來創建查詢,然後再將其提交到數據庫。預備語句是更好的選擇,因爲更好的SQL注入防禦。

你可以對各種表使用LEFT JOIN,但這意味着要包括來自每個表(武器,盾牌,劍......)的許多列,如果類別不匹配,這些列將是空的。嘗試從單個查詢中提取數據會很糟糕...

PS:爲什麼會有SWORD表?這不是由WEAPON表所涵蓋嗎?