Mysql 一对多 一条数据对应多条数据 多条数据合并成一个字段显示

2024-09-05 08:08

本文主要是介绍Mysql 一对多 一条数据对应多条数据 多条数据合并成一个字段显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景:产品列表显示产品的多个标签 mysql 查询。

以往的解决办法都是查出先查出产品列表,在循环查询标签,多个标签用","隔开。

这样查询列表查一次数据库,循环列表又要查询数据库多次。性能太差。

表结构:

产品表:

CREATE TABLE `kx_product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL DEFAULT '标题',
  `preview` varchar(200) NOT NULL DEFAULT '' COMMENT '预览图片',
  `content` varchar(2000) NOT NULL DEFAULT '' COMMENT '内容',
  `number` varchar(20) NOT NULL DEFAULT '' COMMENT '货号',
  `stock` int(10) NOT NULL DEFAULT '0' COMMENT '库存',
  `add_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
  `memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='系统:产品表';

标签表:

CREATE TABLE `kx_product_label` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
  `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:删除;0:正常',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '-1:删除;-1:隐藏;0:禁用; 1:启用;2:锁定',
  `add_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
  `memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='系统:产品标签';

产品标签关系表:

CREATE TABLE `kx_product_item_label` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_product` int(11) NOT NULL DEFAULT '0' COMMENT 'from:kx_product->id',
  `id_label` int(11) NOT NULL DEFAULT '0' COMMENT 'from:kx_product_label->id',
  `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1:删除;0:正常',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '-1:删除;-1:隐藏;0:禁用; 1:启用;2:锁定',
  `add_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
  `memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COMMENT='系统:产品标签集合 一个产品有很多个标签';

解决办法:

      使用 关键词 GROUP_CONCAT():(返回一个字符串结果,该结果由分组中的值连接组合而成。)

1.做链接查询:

SELECT
    a.id,
    a.content,
    a.title,
    a.add_time,
    a. CODE,
    a.number,
  l.title
FROM
    `kx_product` `a`
LEFT JOIN `kx_product_item_label` `ls` ON `ls`.`id_product` = `a`.`id`
LEFT JOIN `kx_product_label` `l` ON `l`.`id` = `ls`.`id_label`

结果:

上面sql 查询出所有结果 我们要的是产品列表 中显示 多个标签

2.加上GROUP_CONCAT() 关键字

加上关键字后,结果集发生了变化,变成了一条数据的字段显示了所有标签

分组处理:得到想要的结果


备注:GROUP_CONCAT关键字 可以去重,排序

去重:GROUP_CONCAT(DISTINCT l.title SEPARATOR ',' ) AS labels

排序:GROUP_CONCAT( l.title order by l.id desc SEPARATOR ',') AS labels

 

这篇关于Mysql 一对多 一条数据对应多条数据 多条数据合并成一个字段显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138406

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

mysql如何查看当前连接数

《mysql如何查看当前连接数》:本文主要介绍mysql如何查看当前连接数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql查看当前连接数查看mysql数据库允许最大连接数总结mysql查看当前连接数查看当前连接数SHOW STATUS LIKE

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个