Php 显示一列中多列的等效值 结构

Php 显示一列中多列的等效值 结构,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我有三张桌子: 第一个是[设备]表: +----------+----------+-----------+-------------+----------+---------+ | equip_id | chara_id | weapon_id | headgear_id | armor_id | ring_id | +----------+----------+-----------+-------------+----------+---------+ | 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_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 |
+----------+------------+----------------+------------+
我的障碍是: 我想显示所选字符中每个
武器id
盔甲id
头盔id
戒指id
(均来自装备表)的等效
项目名称
。 e、 g:

武器标识:1=>项目表中的项目名称
armor_id:3=>items表中的item_名称 等等

预期结果: 当我查询角色的装备时,它会返回武器名称,而不是武器id。
---------------
字符id:1
武器:匕首
Headgear:Dagger(字符数据是示例,只要返回项目名称就无所谓)
盔甲:头盔
戒指:束腰外衣

这可以用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,只需将它们从查询中删除即可

您可以使用连接

SELECT c.chara_name as name, i.item_name
FROM chara c
  LEFT JOIN equipment AS e ON c.chara_id = e.chara_id
  LEFT JOIN item AS i ON i.id = e.item_id
WHERE c.chara_id = 1

您可能需要处理多行。。但这只是一个问题。

我想你在寻找这个:

SELECT e.equip_id, w.item_name AS weapon, a.item_name AS armor, 
    h.item_name AS headgear, r.item_name AS ring
FROM equipment e
INNER JOIN item AS w ON (w.item_id = e.weapon_id)
INNER JOIN item AS a ON (w.item_id = e.armor_id)
INNER JOIN item AS h ON (w.item_id = e.headgear_id)
INNER JOIN item AS r ON (w.item_id = e.ring_id)

;-)

你是在对着我们大喊大叫还是在说懒话?下定决心吧。。对不起,我没有尖叫,只是标题格式为所有的帽子是不是任何一种合理的格式。学习降价。你能发布你的预期结果吗?好的,请稍等。。一排。。光滑的。。对不起,我还不能投票支持你。。。我有更多的声誉,但肯定是你的sql马斯塔。