为什么查看父表的ID和名称以及子表的名称会出现这种样式的结果和查看子表ID、名称和父表的名称会不一样。
规律我倒是能总结出来,但是我反反复复看了一上午,就是搞不明白,为什么会出现12分13秒那种样式的表格,为什么会和前面的输出结果不一样。
规律我倒是能总结出来,但是我反反复复看了一上午,就是搞不明白,为什么会出现12分13秒那种样式的表格,为什么会和前面的输出结果不一样。
2017-01-30
原因在于建立表的时候就将type_id 与parent_id 做了关联
| type_id | type_name | parent_id | +---------+-----------------+-----------+ | 1 | 家用电器 | 0 | | 2 | 电脑、办公 | 0 | | 3 | 大家电 | 1 | | 4 | 生活电器 | 1 | | 5 | 平板电视 | 3 | | 6 | 空调 | 3 | | 7 | 电风扇 | 4 | | 8 | 饮水机 | 4 | | 9 | 电脑整机 | 2 | | 10 | 电脑配件 | 2 | | 11 | 笔记本 | 9 | | 12 | 超级本 | 9 | | 13 | 游戏本 | 9 | | 14 | CPU | 10 | | 15 | 主机 | 10 |
看上面的输出,家用电器和电脑办公的parent_id 为0,而type_id列 没有为0的,所以他们没有父类;大家电和生活电器的parent_id为1,那么type_id为1的就是家用电器,所以家用电器是他们的父类;依次类推,平板电视和空调的父类就是大家电。。。。
那么也就是说要用子表的parent_id去和父表的type_id做连接。也就是说x.parent_id,这个x是谁谁就是子表
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;
这一段是用子表左交父表,由于0父表没有,所以会产生NULL
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id;
这一段使用父表左交子表,子表中没有5,6,7,8,11,12,13,14,15,这9项子表中没有,所以产生9个NULL.
后面再通过GROUP BY,ORDER BY,就产生出你看到的那些
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON p.parent_id = s.type_id;
注意两条语句 ON 条件不同,上面显示的是所有类及其父类 ,下面显示的是所有类及其子类,我好晕,谁能救救我
举报