學校表:
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號標簽的學校列表
