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
结果: