mysql5.7通過json類型替代關聯表


學校表:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM