mysql多对多关系下,一条数据怎么取出另一个表的多个值
文章描述
mysql多对多关系下,一条数据怎么取出别一个表的多个值; 如一个学生怎么查询出他的所有老师,一个装备怎么查询出能能使用它的所有职业,通过GROUP_CONCAT函数就可以轻松解决
最近有写一个游戏官网的项目,遇到了一些问题,记录一下解决方式
游戏中有职业和装备的模块,一个装备可以被多个职业使用,但不是所有的职业都可以使用所有装备;基于此前提:需要设计一个装备表,一个职业表
- 问题1: 怎么解决装备表和职业表的关联网呢?其实就是多对多的关系问题
 - 创建一个中间表,维护两个表的关系
 - 问题2: 怎么查询一件装备的时候,得出所有使用他的职业?
 - 首先用的是典型的mysql多对多查询
 
SELECT
	equip.id,
	equip.equip_name,
	roles.role_name
FROM
	equip,
	roles,
	equip_and_role 
WHERE
	equip.id = equip_and_role.equip_id 
	AND roles.id = equip_and_role.role_id 
结果:

很明显这个结果不是想要的,我的装备只有2件,应该只得到2件,此是通过分组查询,得到了想要的结果,但是也产生了问题3
SELECT
	equip.id,
	equip.equip_name,
	roles.role_name
FROM
	equip,
	roles,
	equip_and_role 
WHERE
	equip.id = equip_and_role.equip_id 
	AND roles.id = equip_and_role.role_id 
GROUP BY equip.id

- 问题3: 怎样得到关联的所有职业名?
 
于是就有了GROUP_CONCAT的出现
SQL
SELECT
	equip.id,
	equip.equip_name,
	roles.role_name,
	GROUP_CONCAT( roles.role_name SEPARATOR ',' ) roles 
FROM
	equip,
	roles,
	equip_and_role 
WHERE
	equip.id = equip_and_role.equip_id 
	AND roles.id = equip_and_role.role_id 
GROUP BY equip.id
结果:
