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马斯塔。