具有多组属性的数据如何存储以及如何查询?

请问各位以下图所示的这种数据如何存储到mysql数据库?
图片描述

一个商标可以注册45个分类,而每个分类细分有许多群组,如下图所示:
图片描述

请问如何存储商标的分类及群组信息?以及前台能够进行多类查询(多条件搜索)?
我目前想到的办法是:数据表建两个字段,一个字段cate用来存储商标分类,另一个字段group用来存储群组。
举例:商标名称为“你好”的商标注册如下三个分类及其群组:
1类:0101、0102、0103、0104、0105、0106
2类:0203、0204、0205、0206、0207
3类:0401、0402、0403、0404、0405、0406、0407

那么存储该商标的信息的时候:
cate字段的值存储为:1,2,3
group字段的值存储为:0101,0102,0103,0104,0105,0106,0203,0204,0205,0206,0207,0401,0402,0403,0404,0405,0406,0407

如果这样存储商标的数据,那么前台如何作多类查询?SQL过滤语句如何组织?
如果用户勾选了1类和2类,同时并选择了1类下面的0101、0102、0104和2类下面的0201、0202、0206,确定提交搜索。后台SQL过滤语句:

select 商标名称等字段信息
from 商标信息表
where
FIND_IN_SET('1',cate) and
FIND_IN_SET('2',cate) and
FIND_IN_SET('0101',group) and
FIND_IN_SET('0102',group) and
FIND_IN_SET('0104',group) and
FIND_IN_SET('0201',group) and
FIND_IN_SET('0202',group) and
FIND_IN_SET('0206',group)
order by cate asc;

请问我这样的思路是否太笨拙,在此,请教各位大神!谢谢。

阅读 1.4k
1 个回答
CREATE TABLE `t_trade_category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商标分类名称',
  `descrition` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商标分类描述',
  `pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父类id',
  `pic` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '/default.jpg' COMMENT '图标',
  `created_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `oid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序id,admin后台表需要',
  `is_hot` int(11) NOT NULL DEFAULT '0' COMMENT '是否热门1为热门',
  `doc` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '商标分类注释',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `pid_index` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='商标分类表';
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题