php - 从一列显示多列的等效值

标签 php mysql sql pdo

结构

我有 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_idarmor_idheadgear_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 |

SQLFiddle

如果您根本不需要结果集中的 ID,只需将它们从查询中删除

关于php - 从一列显示多列的等效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160136/

相关文章:

android - 数据库创建语句没有创建第二个表?

php - 数组对象未打印在输入字段中并且 sql 查询未接收 id 值

php - 检查 Internet Explorer。 PHP 与 ie 条件注释?

php - 文件名通过 Python 中的连接字符串

php - MySQL多SELECT查询成表单然后UPDATE

java - 选择 Android Realm 中的计数

php - 跟踪电子邮件以真实图像打开

php - 显示结果很慢

MySQL 将行转为动态数量的列

mysql - SQL 中的 if 语句