concat
今天做项目时遇到这样一个需求:数据库有一张album相册表和一张image照片表,页面要显示的是相册的名称和该相册下所有的照片(一个相册包括好几张照片):
相册表:
照片表:
第一次尝试:这样可以发现相册名称会重复很多
第二次尝试:使用GROUP_CONCAT函数,这样就可以将相册下的所有照片显示在对应的一个相册了
这样在前端对photo分割,显示每张照片,如下:
CONCAT()函数
【作用】
将多个字段链接成一个字符串(主要用于连接不同字段的)
【使用方法】
- 默认连接字段之间没有分隔符:
- 使用特定分隔符分割,如使用“,”逗号分割,使用CONCAT_WS()函数:
这个函数实际中还没用过,但可定不是永远我上面举得例子,应该是这样的:表中有姓firstName字段和名称lastName字段,但返回结果要姓名,这时就可以用CONCAT()函数
【注意】
- 网上说当要连接的字段中有一个字段的值为Null时,组合后的字符串就是NULL,但本人实验后并不是这样的,只是把为NULL的字段显示为NULL,其它的字段正常显示
- oracle中CONCAT()只能连接两个字段,要想连接多个,可以嵌套使用CONCAT()
GROUP_CONCAT()函数
【作用】
将分组中的值连接成一个字符串(所以要结合GROUP BY 使用),将该字符串返回(主要用于分组显示的)
【使用方法】
- 默认连接字段之间用“,”逗号分隔:
- 使用特定分隔符分割,如用“-”分割,这样将album_id和image组合到一起,并且以album_id分组显示
- 联和使用GROUP_CONCAT和CONCAT
- 可以限制连接后字符串的最大长度,超出这个长度后字段截取设置的最大长度的字符串,需要对系统参数进行设置:SET
@@global.group_concat_max_len=40000;
- 对连接后的分组字符串使用DISTINCT去重,这样就可以去掉重复的组合只保留一个相同组合
SELECT album_id,GROUP_CONCAT(DISTINCT image) photo
FROM image
GROUP BY album_id
- 对组合字符串进行排序,及组合字符串显示的顺序(字段组合顺序不变):
SELECT album_id,GROUP_CONCAT( album_id,id order BY id ASC) photo
FROM image
GROUP BY album_id
相关阅读
前言 这连天有人问我一些mysql的备注信息,不得已还是写一遍博客吧 1、创建表的时候,添加表名备注和字段备注 CREATE TABLE `
本文实在网上找的资料的基础上修改的 未修改的原文地址http://blog.sina.com.cn/s/blog_672b419f0102y5yf.html 下面是安装过程 1
一、索引概述 1. 简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 举例
环境:基于mysql 5.6.41(下载免安装版的zip文件) 下载地址:https://dev.mysql.com/downloads/mysql/5.6.html#downloads 将下载好的z
从数据库读出来的日期后面多了个 .0 的解决办法从数据库读出来的日期后面为什么多了个 .0,这是因为你数据库的该字段设置为 timest