数据库里把数值存为 String,按数值大小排序
select * from experience_salary order by avg_salary+0 desc
字段后 +0
就可以啦
不过好像不这样也能排序来着…
配合 SpringBoot + Mybatis
传一个数组来
数组首先要转为 String 。
用自带的 toString()
转后需要去掉 []
。
String ids = jobIds.toString().replace("[", "").replace("]","");
List<JobInfo> jobs = Mapper对象.getRecommenedJobs(ids);
@Select("select * from job_info where id in (${jobIds})")
List<JobInfo> getRecommenedJobs(@Param("jobIds")String jobIds);
传一个对象来
@Select("select id,job_name,min_salary from
(select job_id,
(
GROUP_CONCAT(label SEPARATOR ' ' )
)as label from job_image group by job_id
)A
join job_info on job_info.id=A.job_id
where (label like '%' #{jineng} '%' or job_name like '%' #{jineng} '%') and min_xueli like '%' #{xueli} '%' and min_salary >= #{min_salary} and job_name like '%' #{job_name} '%' ")
List<JobInfo> getRecommenedJobsBySqlQuery(JobAnalysis jobAnalysis);
这个略复杂,一层层来。
SQL
select id,job_name,min_salary from (
select job_id,(GROUP_CONCAT(label SEPARATOR ' ' ))as label from job_image group by job_id
)
A join job_info on job_info.id=A.job_id where (
label like '%' #{jineng} '%' or job_name like '%' #{jineng} '%'
)
and min_xueli like '%' #{xueli} '%' and min_salary >= #{min_salary} and job_name like '%' #{job_name} '%'
传对象
直接这样传参数就行啦。
List<JobInfo> getRecommenedJobsBySqlQuery(JobAnalysis jobAnalysis);
使用对象的属性
传来对象,使用方式,在 SQL 中用 #{value}
来调用对象的属性。
把表中一个字段对应的多个字段连接起来
concat()函数
- 功能:将多个字符串连接成一个字符串
- 语法:concat(str1, str2, …)
group_concat()函数
- 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
- 语法:group_concat( [distinct] 要连接的字段 [ order by 排序字段 asc/desc ][ separator ‘分隔符’ ] )
- 说明:通过使用 distinct 可以排除重复值。如果希望对结果中的值进行排序,可以使用order by子句。separator是一个字符串值,缺省为一个逗号。
比如说表(job_image)
job_id label
1 吃饭
1 打豆豆
1 打游戏
1 写代码
select job_id, (GROUP_CONCAT(label SEPARATOR ' ' ))as label from job_image group by job_id )
显示效果
job_id label
1 吃饭 打豆豆 打游戏 写代码
as label
后面的 as label
意思就是把查到并连接起来的东西命别名为 label
。
group by
以上面为例,意思就是按 job_id
分组排序
把表变一下
job_id label
1 吃饭
1 打豆豆
1 打游戏
1 写代码
2 蹦迪
如果只执行此代码,结果为
job_id label
1
2
哈哈~~
联合查询
联合查询就是为了
join job_info on job_info.id=A.job_id
在原 SQL 中 join 前有个 A ,其实是前面省略了 as ,即命别名。
这里的意思就是把上面通过连接得到的字段和 id 当做一个新表 A。
整体回顾一遍,就是把表 job_image
重新组合(连接字段),命别名为 A
。
上面这行代码意思就是把表 A (别名)和 job_info
表联合在一起查询。
两个表间的桥梁就是 A.job_id
和 iob_info.id
。
where 后面的一大段东西
like
- 匹配方式:
- %
- _
- []
- [^]
- 与 Mybatis 用
min_xueli like '%' #{xueli} '%'
因为混合变量(#{xueli}),所以要用这种方式添加匹配符。
or and ()
这种逻辑可以用括号来指定先后