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

结果:

评论(共1条)