mysql 多对多查询

SELECT * FROM test_user LIMIT 3; #得出(1,2,3)
# user和 role是多对多的关系
# 多个user对应多个role
# 需求是根据条件查出user列表,并且里面携带了自己所有的role
# 本来思路是在user表里面查出所有user
# 然后通过for循环,在循环里面用两个left join来查询每个人的所有角色
# 但是在for循环里连表速度会有损耗

# group_concat()

# 1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

# 2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
SELECT u.*,GROUP_CONCAT(r.name) as names FROM  test_user u LEFT JOIN test_user_role ur on ur.user_id=u.id 
LEFT JOIN test_role r on r.id=ur.role_id WHERE u.id in (1,2,3) group by u.id # 通过查出的结果group出结果集

 

你可能感兴趣的:(mysql 多对多查询)