2
我们假设我们有两个简单表cars
和owners
。每辆车可以有很多车主。我们可以在两次查询中使用外键获取所有车辆及其车主,但在单一查询中如何操作呢?与MySQL的每个连接都相当昂贵,所以我使用data group
和json
来解决问题。使用json在一个查询中获取一对多关系
select
cars.id,
CARS.name,
GROUP_CONCAT(CONCAT('{"id":"',owners.id,'", "name":"', owners.name, '"}')) owners
from cars
join owners
ON cars.id = owners.car_id
group by owners.car_id
演示:http://www.sqlfiddle.com/#!2/a62711/3
它工作正常,但是否有此方法的任何缺点?我想到的一件事是结果字段长度的一些限制。有没有?如果owners.name
包含非法字符(如引号或撇号),是否应该准备我的查询来中断?我应该考虑什么?
是的,首先阅读[* docs *](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat) – 2014-09-12 13:04:57