在实体关系语言中,这称为多对多关系.一个产品可以有多个类别,一个类别可以有多个产品.

要在关系数据库中执行此操作,您需要三个表.

product: product_id, name, description, etc

category: category_id, catname, catdescription, etc

然后用这个所谓的联接表建立产品和类别之间的关系.

product_category: product_id, category_id

product_category的主键是两列在一起-这是复合主键.

如果您有这些产品

1 chromebook

2 minitower

3 macbook

4 laptop

和这些类别

1 chromeos

2 portable

3 windows 7

4 macos

然后,您将在product_category表中具有这些条目

1 1 chromebook categories: ... chromeos

1 2 ... portable

2 3 minitower category ... windows 7

3 2 macbook categories ... portable

3 4 ... macos

4 2 laptop categories ... portable

4 3 ... windows 7

因此,如果您想查看每种产品的类别,则可以

SELECT name, description,

GROUP_CONCAT(catname) categories

FROM product

JOIN product_category USING (product_id)

JOIN category USING (category_id)

同样,如果您想要所有笔记本电脑,则可以执行此操作.

SELECT name, description

FROM product

JOIN product_category USING (product_id)

JOIN category USING (category_id)

WHERE catname = 'laptop'

如果要使用所有的macos笔记本电脑设备,则要复杂一些.

SELECT name, description

FROM product p

JOIN product_category pca ON p.product_id = pca.product_id

JOIN category ca ON pca.product_id = ca.product_id

AND ca.catname = 'macos'

JOIN product_category pcb ON p.product_id = pcb.product_id

JOIN category ca ON pcb.product_id = cb.product_id

AND cb.catname = 'laptop'

请注意,组合主键可防止您多次将产品分配给类别,反之亦然.

专家提示:为清楚起见,在所有表中为连接的值使用相同的列名是一个好主意.例如,product_id同时显示在product和product_category表中.

php传输的多个id集中为一条记录,如何将多个ID应用于Mysql中的一条记录?相关推荐

  1. python mysql批量insert数据、返回id_Python3 操作 MySQL 插入一条数据并返回主键 id的实例...

    Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF- ...

  2. 【MOS】如何利用RMAN可传输表空间迁移数据库到不同字节序的平台(文档 ID 1983639.1)...

    如何利用 RMAN 可传输表空间迁移数据库到不同字节序的平台 (文档 ID 1983639.1) 适用于: Oracle Database - Enterprise Edition - 版本 10.1 ...

  3. mysql中在表中insert数据时,有重复主键id时,变成update

    MySQL 自4.1版以后开始支持INSERT - ON DUPLICATE KEY UPDATE语法 例如:  id name sex age  1 kathy male 23  2 Javer f ...

  4. mybatis添加记录时返回主键id

    参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作. 在使用mybatis作为ORM组件时,可以很方便地达到这 ...

  5. Mysql 中获取刚插入的自增长id的值

    1 insert into user (username,password) VALUES ('zyl','123'); 2 //获取刚插入的自增长id的值 3 select last_insert_ ...

  6. SQL获取刚插入的记录的自动增长列ID的值

    假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...

  7. 全局唯一递增的id_分布式ID生成方法-趋势有序的全局唯一ID

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  8. 关于MySql中自增长id设置初始值

    在MySQL数据库,设置了id为自增长类型,但由于程序还处于开发阶段,很容易的会产生错误数据,然后就直接删除了,可是id的自增长值没有跟着减少,这里提示: 如果表中数据没有用,直接删除了数据,自动增长 ...

  9. mysql id会用完吗_数据库自增ID用完了会怎样?

    起步 对DBA来说这应该是送分题吧.而我是突如其来的想法想测试下的.正常来说程序员是不会关心自增ID用完的情况的. 以 Mysql 为例,它支持的最大的整型是 unsigned bigint,上限是 ...

最新文章

  1. SDWebImage使用,图片加载和缓存
  2. 基于MAP-MRF的视差估计
  3. ionic3 安装遇到的问题
  4. 2014-06-27nbsp;20:47
  5. wsl 或者window terminal 下出现Java 14 switch expressions unrecognized解决方法:升级java jdk到14 or later
  6. 【时间序列】使用 Auto-TS 自动化时间序列预测
  7. python的特殊方法介绍
  8. Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
  9. Linux内存管理 -- /proc/{pid}/smaps讲解
  10. 1. MFC编程——变量命名规则
  11. 中年妇女,偶很想念你
  12. Kerberos学习(四)
  13. 重温Python基础——列表
  14. 华为鸿蒙系统能玩安卓游戏吗_华为鸿蒙系统出来后安卓游戏账号还能用吗 鸿蒙和安卓游戏数据会互通吗...
  15. MYSQL DATA_FORMAT函数
  16. 制作一个简单的Android版的音乐播放器
  17. 电影网网站优化-系统优化篇
  18. Google Guice的使用方式
  19. 20230102今天的世界发生了什么
  20. nginx 正反向代理

热门文章

  1. 云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路
  2. 说真的,程序员相亲,真的太太太太太太难了 | IT巨能唠
  3. 百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...
  4. r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化
  5. php组成,PHP的控制结构,PHP脚本是由一系列语句组成的。
  6. SpringBoot集成Myabtis
  7. 用PL/SQL Develpoer工具完成导入和导出
  8. .流程引擎对接的三种方式_02
  9. Centos7 安装maven
  10. 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test