1 group_concat
功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果
语法: group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
tips:
[]内为可选, 分隔符不默认是逗号
,
应用场景: 常见一对多表结构关系,将根据一表方分组,查询对应多表某列数据,以规定的格式拼接成字符串
eg:
# 查询用户表所有信息SELECT * FROM `userinfo`12
# 根据brand分组, 查询每个brand的title,并以逗号,拼接select brand ,GROUP_CONCAT(title) from `userinfo` GROUP BY brand;12
# 根据brand分组, 查询每个brand的title,并以美元符号$拼接
select brand ,GROUP_CONCAT(title separator '$') from `userinfo` GROUP BY brand;12
2 @i:=@i+1
Oracle中有一个伪列
rownum,在查询结果时生成一组递增的序列号,可以用于分页截断等作用.
Mysql中没有该伪列,可通过上述模拟生成一列自增序号.
功能: 在查询结果时生成一组递增的序列号
语法:
SELECT (@i:=@i+1) as rownum , 查询字段 FROM 查询表名 ,(select @i:=0) as a
tips:
(select @i:=0) 定义初始序号为0(可更换为其他如10,20,…),且必须起别名,别名无规定,不与查询表名相同即可.
(@i:=@i+1) 定义递增规则,每次递增为1(可更换为5,10,…)
# 查询用户表所有信息SELECT * FROM `userinfo`12
# 添加自增序列号 初始为0,每次递增1SELECT (@i:=@i+1) as rownum , u.* FROM `userinfo` u ,(select @i:=0) a12
# 添加自增序列号 初始为10,每次递增5SELECT (@i:=@i+5) as rownum , u.* FROM `userinfo` u ,(select @i:=10) a12