Php 查询包含或不包含值的道具列表

Php 查询包含或不包含值的道具列表,php,mysql,select,relational,Php,Mysql,Select,Relational,我试图对三个关系表进行SELECT,如下所示: table_materials -> material_id - material_name table_props -> prop_id - prop_name table_materials_props - row_id -> material_id -> prop_id - prop_value 在我的页面上,我希望得到这样的结果,但我对查询有一些问题: material prop A prop B

我试图对三个关系表进行
SELECT
,如下所示:

table_materials
-> material_id
- material_name

table_props
-> prop_id
- prop_name

table_materials_props
- row_id
-> material_id
-> prop_id
- prop_value
在我的页面上,我希望得到这样的结果,但我对查询有一些问题:

material    prop A    prop B    prop C    prop D    prop E
wood        350       NULL      NULL      84        16
iron        NULL      17        NULL      NULL      201
copper      548       285       99        NULL      NULL
因此,查询应该返回如下内容:

material   prop_name     prop_value
wood       prop A        350
wood       prop B        NULL
wood       prop C        NULL
wood       prop D        84
wood       prop E        16
// and go on with others rows
SELECT *
FROM table_materials AS m
INNER JOIN table_materials_props AS mp
ON m.material_id = mp.material_id
INNER JOIN table_materials_props AS p
ON mp.prop_id = p.prop_id
ORDER BY p.prop_name
我想用一些类似于:

material   prop_name     prop_value
wood       prop A        350
wood       prop B        NULL
wood       prop C        NULL
wood       prop D        84
wood       prop E        16
// and go on with others rows
SELECT *
FROM table_materials AS m
INNER JOIN table_materials_props AS mp
ON m.material_id = mp.material_id
INNER JOIN table_materials_props AS p
ON mp.prop_id = p.prop_id
ORDER BY p.prop_name
问题是查询没有返回
NULL
值,我需要所有
物料的
prop
顺序相同,无论prop值是否为
NULL

我希望这个例子是清楚的

交叉连接(或不带条件的内部连接)所有选项,然后将其左连接到关联实体表。即使组合在关联表中不存在,左连接也将保留道具/材质

未经测试:

SELECT * 
FROM table_materials AS m
INNER JOIN table_props as p 
LEFT JOIN table_material_props AS mp 
ON p.prop_id = mp.prop_id 
AND 
m.material_id = mp.material_id;
ORDER BY p.prop_name

你是否有一个固定的“道具”列表在你的链接表中只有5个,或者这只是一个例子。。。如果修复,您是否希望严格控制“道具”的数量,从而限制创建交叉标签样式的结果?道具的数量可能会增加,因此我决定使用这种结构。