Mysql 内部使用一个表连接多个列
我有两个不同的表,一个是类别ID和名称,另一个是我的员工信息。员工可以拥有更多类别 表格示例: 类别表:Mysql 内部使用一个表连接多个列,mysql,database,inner-join,Mysql,Database,Inner Join,我有两个不同的表,一个是类别ID和名称,另一个是我的员工信息。员工可以拥有更多类别 表格示例: 类别表: IDCAT | Name ---------- 1 | Mechanic 2 ! Office 3 | Generic Mechanic 员工表: ID | Name | cat1 | cat2 | cat3 -------------------------------------------- 1 | Mechanic | 1
IDCAT | Name
----------
1 | Mechanic
2 ! Office
3 | Generic Mechanic
员工表:
ID | Name | cat1 | cat2 | cat3
--------------------------------------------
1 | Mechanic | 1 | 2 |
2 ! Office | 1 | 3 |
3 | Generic Mechanic | 1 | 2 | 3
我想用MySQL打印一个这样的表,这样我就可以在PHP脚本中打印它:
ID | Name | cat1 | cat2 | cat3
--------------------------------------------------------------------------------
1 | Mechanic | Mechanic | Office |
2 ! Office | Mechanic | Generic Mechanic |
3 | Generic Mechanic | Mechanic | Office | Generic Mechanic
我尝试使用此查询,但我只打印第一个类别名称
SELECT * FROM 'Employee' INNER JOIN category on Employee.cat1 = category.idcat
我能做些什么来得到我的结果吗?或者我应该改变我的表格吗?
谢谢
请注意,您的Employee表的结构很差。
通常,您会有一个单独的表来保存EmployeeID+CategoryID并添加外键
可以在此处找到,这将使您更好地了解如何更好地构造表。您应该规范化表,避免为类别设置多个列,例如:
Category table:
IDCAT | Name
----------
1 | Mechanic
2 ! Office
3 | Generic Mechanic
Employee table:
ID | Name
----------------------
1 | Emp1 Mechanic
2 ! Office
3 | Generic Mechanic
Employee_category
id | id_emp | id_cat
-------------------------
1 ! 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 3
5 ! 3 | 1
6 | 3 | 2
7 | 3 ! 3
基于此模式,您可以使用group_concat在一行中获取与员工相关的所有类别
select e.name, group_concat(c.name)
from employee e
inner join Employee_category ec on e.id = ec.id_emp
inner join Caetgory c on c.idcat = ec.id_cat
group by e.name
有多少
cat
列?您将需要为每一列加入,并且您必须命名您想要的列,而不仅仅是选择*
谢谢,使用flip solution,我成功地获得了我的视图。我也会考虑改组桌子!好吧,如果我的答案至少有用的话,你可以适当地给它打分
select e.name, group_concat(c.name)
from employee e
inner join Employee_category ec on e.id = ec.id_emp
inner join Caetgory c on c.idcat = ec.id_cat
group by e.name