结构
我有 3 个表:
第一个是[设备]表:
+----------+----------+-----------+-------------+----------+---------+
| equip_id | chara_id | weapon_id | headgear_id | armor_id | ring_id |
+----------+----------+-----------+-------------+----------+---------+
| 3 | 1 | 3 | 3 | 5 | 6 |
| 4 | 2 | 1 | 2 | 3 | 4 |
+----------+----------+-----------+-------------+----------+---------+
第二个是 [item] 表:
+---------+--------------+-----------+----------+----------+----------+-------------------------------+-----------+------------+
| item_id | item_name | item_type | item_atk | item_def | item_atr | item_img | item_desc | item_price |
+---------+--------------+-----------+----------+----------+----------+-------------------------------+-----------+------------+
| 0 | Halberd | 1 | 220 | 20 | 0 | pics/weapons/halberd.png | | 400 |
| 1 | Axe | 1 | 220 | -10 | 0 | pics/weapons/axe.png | | 200 |
| 2 | Wooden Sword | 1 | 70 | 0 | 0 | pics/weapons/wooden-sword.png | | 225 |
| 3 | Dagger | 1 | 60 | 5 | 0 | pics/weapons/dagger.png | | 55 |
| 4 | Bow | 1 | 120 | 1 | 0 | pics/weapons/bow.png | | 0 |
| 5 | Helmet | 4 | 0 | 20 | 0 | pics/headgear/helmet.png | | 155 |
| 6 | Tunic | 2 | 0 | 10 | 0 | pics/armors/tunic.png | | 50 |
| 7 | Armour | 2 | 0 | 45 | 0 | pics/armors/armour.png | | 0 |
| 8 | Necklace | 3 | 15 | 5 | 0 | pics/accessories/necklace.png | | 199 |
+---------+--------------+-----------+----------+----------+----------+-------------------------------+-----------+------------+
最后一个是 [chara] 表:
+----------+------------+----------------+------------+
| chara_id | chara_name | chara_class_id | chara_gold |
+----------+------------+----------------+------------+
| 1 | Lawrence | 1 | 0 |
| 2 | Testo | 0 | 0 |
| 3 | Viscocent | 2 | 0 |
| 4 | Piatos | 1 | 0 |
| 5 | Hello | 4 | 0 |
+----------+------------+----------------+------------+
我的障碍:
我想显示每个 weapon_id
、armor_id
、headgear_id
的等效 item_name
(来自项目表) > 和 ring_id
(全部来自设备表)来自所选角色。
例如:
weapon_id: 1 => items 表中的 item_name
armor_id: 3 => items 表中的 item_name
等..
预期结果:
当我查询一个角色的装备时,它返回的是武器名称而不是武器 ID。
--------------
chara_id: 1
武器: Dagger
头饰: Dagger (角色数据是样本无所谓,只要返回item_name即可)
防具: Helm
戒指:束腰外衣
这可以简单地用 4 个查询来解决,但如果有更好的解决方案,我不想使用 4 个查询。
最佳答案
尝试
SELECT e.chara_id,
e.weapon_id, i1.item_name weapon_name,
e.headgear_id, i2.item_name headgear_name,
e.armor_id, i3.item_name armor_name,
e.ring_id, i4.item_name ring_name
FROM equipment e LEFT JOIN
item i1 ON e.weapon_id = i1.item_id LEFT JOIN
item i2 ON e.headgear_id = i2.item_id LEFT JOIN
item i3 ON e.armor_id = i3.item_id LEFT JOIN
item i4 ON e.ring_id = i4.item_id
WHERE e.chara_id = 1
输出
| CHARA_ID | WEAPON_ID | WEAPON_NAME | HEADGEAR_ID | HEADGEAR_NAME | ARMOR_ID | ARMOR_NAME | RING_ID | RING_NAME |
------------------------------------------------------------------------------------------------------------------
| 1 | 3 | Dagger | 3 | Dagger | 5 | Helmet | 6 | Tunic |
如果您根本不需要结果集中的 ID,只需将它们从查询中删除
关于php - 从一列显示多列的等效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160136/