标题描述的不太清楚,我举个例子:
数据库 Bill 有如下字段 createTime:创建时间 billName:账单名称 billCategory:账单分类 billAccount:账单账户 等等
然后前端通过下拉菜单会有如下筛选: 开始时间,结束时间,账单分类,账单账户,等等
如果前段对每个条件都设置值的话,后台数据库查询很容易
但假如说 [账单分类] 前台并没有通过下拉菜单进行选择,而是选择了默认,会向后台传递一个 -1 值
这个时候后台的查询语句该怎么写啊
因为条件字段有若干个,如果不选择的话都会返回一个默认特定值,但条件有挺多的,会有若干个组合,所以就想请问,MYSQL 有没有类似的语句,就是当 where 种某个条件等于某个值时,这个条件就不起作用 -_-|||
我目前想到的方法是先在后台把所有的数据全查出来,然后再根据传递过来的数据筛选,但好像这个方法有点笨
一直写 android ,完全是赶鸭子上架,求大佬
感谢大家,@thetbw 大佬说的没错儿,就是 mybatis 中的 if,已经搞定,赶鸭子上架,匆忙学了点儿就写了,见笑了
@Select({"<script>",
"SELECT * FROM Test" +
" WHERE 1=1" +
" <when test='a!=-1'>" +
" AND a = #{a}" +
" </when>" +
" <when test='b!=-1'>" +
" AND b = #{b}" +
" </when>" +
" <when test='c!=-1'>" +
" And c = #{c}" +
" </when>" +
" </script>"})
ArrayList<TTT> testMySQL(@Param("a") String a, @Param("b") String b, @Param("c") String c);
1
eason1874 2021-12-08 02:32:46 +08:00
前端传过来的参数你不要直接用,过滤和判断,把 -1 的过滤掉
|
2
ltltfuture 2021-12-08 02:53:48 +08:00
看看我这理解的对不对
比如你要写 SELECT createTime, billName, billCategory, billAccount FROM Bill 后面加上 WHERE (billCategory <> -1 or billCategory=“你传入的参数” ) AND 后面依次加上其他列... |
3
aragakiyuii 2021-12-08 07:21:38 +08:00 via iPhone
代码里把 -1 过滤掉不就行了…
|
4
thetbw 2021-12-08 08:56:29 +08:00
这部就是 mybatis 的 if 吗
<if test="billCategory!= null and billCategory!=-1"> and bill_category = #{billCategory} </if> |
5
dream4ever 2021-12-08 08:59:45 +08:00
最原始的方式,就是手动拼装 SQL 语句嘛。
|
6
onhao 2021-12-08 11:26:30 +08:00
楼主看来是不想在程序里处理, 直接在 mysql 里咯, 那么我这里有一个办法不知楼主敢不敢用!
https://wuhao.pw/archives/268/ 这方法可能争议很大的 , 用函数来实现,自定义一个函数 来处理这个特定值。^_^ |
7
raptor 2021-12-08 11:45:10 +08:00
SELECT createTime, billName, billCategory, billAccount
FROM Bill WHERE (:billCategory = -1 or billCategory=:billCategory) 然后把输入值传给:billCategory 这个参数即可。 |
9
2i2Re2PLMaDnghL 2021-12-08 15:35:03 +08:00
如果传参可以有序参数化的话
WHERE ?1<>-1 OR billCategory=?1 如果不能的话 WHERE ?<>-1 OR billCategory=? 并且把这个参数传两遍,就会变成 query(sql, a, a, b, b, c, c, d, d) 这样的结构(你也可以再封装一下) 对于恒 true 或者恒 false 的条件,SQL 会在编译期直接优化掉。 |
10
gesse 2021-12-08 18:06:44 +08:00
你个人像事情逻辑有点问题
|