Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 内部使用一个表连接多个列_Mysql_Database_Inner Join - Fatal编程技术网

Mysql 内部使用一个表连接多个列

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

我有两个不同的表,一个是类别ID和名称,另一个是我的员工信息。员工可以拥有更多类别

表格示例:

类别表:

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