mysql 如何查询多对多关系表?

表关系:
图片描述

问题:
如何使用原生sql语句查询如图数据呢?
期望数据结构(产品的列表项以个嵌套对象出现):

{
  "category": [
    {
      "id": 1,
      "name": "name1",
      "product":[
          {
            "id":2,
            "detail":"水果"
          },
          {
            "id":8,
            "detail":"鲜花"
          }
      ]
    }
  ]
}
阅读 8.4k
1 个回答

有两种方式,

  1. 先查询出category,然后遍历category查出每个categoryproduct,会导致N+1查询问题
  2. 先查询category,然后将所有的category.idin查询,在内存中根据关系匹配,只要2次查询。

推荐第二种,栗子:

  1. 取出你要的category列表

    select * from category
  2. 1中得出的id放到in中联合查询category_productproduct,得到product列表

    select category_id, product.id, product.detail from category_product where category_id in (...)
    left join product 
    on category_product.product_id=product.id
  3. 2中得到的product根据category_id放到1中的对应的category.product数组中

    ...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题