学校表:

1 create table school(
2   `id` bigint unsigned primary key not null auto_increment,
3   `name` varchar(10) not null,
4   `tagId` json
5 );

tagId字段为json数组,存有标签表中的id

标签表:

1 create table tag(
2 `id` bigint unsigned primary key not null auto_increment,
3 `name` varchar(10) not null
4 );

在查询时,可以使用group_concat和concat函数手动拼接json:

select
*,
(select concat('[',group_concat('{"id":',tag.id,',"name":"',tag.`name`,'"}'),']')
from `tag`
where json_contains(`school`.tagId, json_array(tag.id))) as `tag`
from school limit 10

即可得到标签的信息,查询结果的tag字段为手动拼接的json数组

如果需要查询有特定的tagId的学校,可以使用json_contains函数:

select
*,
(select concat('[',group_concat('{"id":',tag.id,',"name":"',tag.`name`,'"}'),']')
from `tag`
where json_contains(`school`.tagId, json_array(tag.id))) as `tag`
from school
where json_contains(tagId,json_array(1))
limit 10

这样即可得到有1号标签的学校列表

mysql5.7通过json类型替代关联表的更多相关文章

  1. mysql中生成列与JSON类型的索引

    MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...

  2. MySQL中的JSON类型

    前言(废话) 昨天抽了点时间在网上搜列了一个开源项目,项目挺完整的,前后台分离还带有微信小程序,我Clone下代码,经过一番倒腾,嘿~还真就跑起来了.在这个过程中,体验了一把VUE项目工程细节,因为之 ...

  3. Effective Java 第三版——34. 使用枚举类型替代整型常量

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. mysql 5.7 laravel json类型数据相关操作

    2018年10月16日18:14:21 官方文档中文翻译版 原文:https://dev.mysql.com/doc/refman/5.7/en/json.html 最后有部分实例和一个小总结 11. ...

  5. 使用mysql innodb 使用5.7的json类型遇到的坑和解决办法

    ---------------------------------------------- #查询JSON的某个字段 select data -> '$.Host' from temp #创建 ...

  6. MySQL json 类型操作快速入门

    MySQL 5.7.8开始支持 json类型. create table t(id int,js json,PRIMARY KEY (`id`)) 插入数据insert into t values(1 ...

  7. Rafy 领域实体框架 - 树型实体功能(自关联表)

      在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...

  8. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  9. 【EF学习笔记08】----------加载关联表的数据 显式加载

    显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...

随机推荐

  1. R语言并行运算示例 parallel 包

    library(parallel)#example 1cl <- makeCluster(getOption("cl.cores", 2))clusterApply(cl, ...

  2. postgres 11 单实例最大支持多少个database?

    有人在pg8时代(10年前)问过,当时说10000个没问题,而且每个db会在/base下建立1个文件夹, 文件ext3只支持32000个子文件夹,所以这是上限了. 而现在早就ext4了,根本没有限制了 ...

  3. js ++i和i++的区别

    ++i和i++的定义: 1.  如果用前缀运算符对一个变量增1(减1),则在将该变量增1(减1)后,用新值在表达式中进行其他的运算.    2. 如果用后缀运算符对一个变量增1(减1),则用该变量的原 ...

  4. 接口测试工具postman

    一. 安装 1. 免费官网链接:https://www.getpostman.com/postman,下载好后双击.exe程序安装即可 2. 注意事项:建议安装在非系统盘,即C盘以外的盘,路径最好用全 ...

  5. js的点滴

    一些好的博客 http://www.cnblogs.com/coding4/p/7809063.html canvas http://www.cnblogs.com/coding4/p/5593954 ...

  6. restful接口定义的几种方式

    GET (SELECT): Retrieve a specific Resource from the Server, or a listing of Resources.        #从服务器检 ...

  7. redis缓存中间件基础

    前序: 默认使用SimpleCacheConfiguration 组件ConcurrentMapCacheManager==ConcurrentMapCache将数据保存在ConcurrentMap& ...

  8. java中循环遍历实体类的属性和数据类型以及属性值

    package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTarg ...

  9. java中的默认类型+spring

    默认引用类型 Integer Character String(包装类)... private Integer age  ; 默认是null 默认基本类型 int char string.privit ...

  10. python3.7导入gevent模块报错的解决方案

    最近更新了python解释器3.7 结果安装gevent,在导入gevent之后就报错了,错误信息如下 RuntimeWarning: greenlet.greenlet size changed, ...