我目前正在制作一款小型RPG游戏,但我遇到了一个小问题。
单位表
UnitID | Name
------ | ------
1 | Bob
装备表1
UnitID | EquipTypeID
------ | -----------
1 | 5
1 | 8
装备表2
UnitID | EquipTypeID
------ | -----------
1 | 10
1 | 12
如果现在我想要对该单元进行概述,请列出插槽中所有可能的可配置类型,例如像这样
UnitID | Name | EquipSlot1 | EquipSlot2
------ | ---- | ---------- | ----------
1 | Bob | 5, 8 | 10, 12
我知道我可以使用像group_concat这样的东西... ...
SELECT ut.UnitID, ut.Name,
group_concat(DISTINCT et1.equipTypeID) as EquipSlot1,
group_concat(DISTINCT et2.equipTypeID) as EquipSlot2
FROM unitTable as ut
LEFT JOIN equipTable1 as et1
ON ut.UnitID = et1.UnitID
LEFT JOIN equipTable2 as et2
ON ut.UnitID = et2.UnitID
然而,我实际上在想的是,如果可以的话,我可以简单地做到......
装备表(将两个表组合在一起,并附加一列表示插槽)
UnitID | EquipTypeID | EquipSlot
------ | ----------- | ---------
1 | 5 | 1
1 | 8 | 1
1 | 10 | 2
1 | 12 | 2
但是,如果我以这种方式构建,我将如何获得相同的结果呢?
答案 0 :(得分:0)
您可以使用cas,因为您只希望根据表格更改数字
SELECT ut.UnitID, ut.Name, et1.equipTypeID,et2.equipTypeID
Case
when et1.equipTypeID then 1
when et2.equipTypeID then 2
end AS EquipSlot
FROM unitTable as ut
LEFT JOIN equiptTable1 as et1
ON ut.UnitID = et1.UnitID
LEFT JOIN equiptTable2 as et2
ON ut.UnitID = et2.UnitID
再次合并您的表用例
SELECT ut.UnitID, ut.Name, ut.equipTypeID, ut.EquipSlot
Case when ut.ut.EquipSlot = 1 then group_concat(ut.equipTypeID) end as EquipSlot1
Case when ut.ut.EquipSlot = 2 then group_concat(ut.equipTypeID) end as EquipSlot2
FROM unitTable as ut
答案 1 :(得分:0)
经过测试后,我终于找到了解决我自己问题的解决方案。
所以我的想法是使用SELECT on SELECT方法根据FROM部分中新表所需的过滤器生成两个(或更多)表,然后只需group_concat结果以获得我想要的答案。
SELECT ut.UnitID, ut.Name, group_concat(DISTINCT et1.equipSlot1), group_concat(DISTINCT et2.equipSlot2)
FROM unitTable as ut,
(SELECT et.unitID, et.EquipTypeID as equipSlot1 FROM equipTable as et, unitTable as ut WHERE et.unitID = ut.unitID AND et.EquipSlot = 1) as et1,
(SELECT et.unitID, et.EquipTypeID as equipSlot2 FROM equipTable as et, unitTable as ut WHERE et.unitID = ut.unitID AND et.EquipSlot = 2) as et2
WHERE ut.unitID=et1.unitID AND ut.unitID=et2.unitID
GROUP BY ut.unitID
希望有人会遇到同样的问题并发现这有用。