MySQL 查询,能否做到当某字段为特定值时,该条件字段不起作用

2021-12-08 02:17:07 +08:00
 lixyz

标题描述的不太清楚,我举个例子:

数据库 Bill 有如下字段 createTime:创建时间 billName:账单名称 billCategory:账单分类 billAccount:账单账户 等等

然后前端通过下拉菜单会有如下筛选: 开始时间,结束时间,账单分类,账单账户,等等

如果前段对每个条件都设置值的话,后台数据库查询很容易

但假如说 [账单分类] 前台并没有通过下拉菜单进行选择,而是选择了默认,会向后台传递一个 -1 值

这个时候后台的查询语句该怎么写啊

因为条件字段有若干个,如果不选择的话都会返回一个默认特定值,但条件有挺多的,会有若干个组合,所以就想请问,MYSQL 有没有类似的语句,就是当 where 种某个条件等于某个值时,这个条件就不起作用 -_-|||

我目前想到的方法是先在后台把所有的数据全查出来,然后再根据传递过来的数据筛选,但好像这个方法有点笨

一直写 android ,完全是赶鸭子上架,求大佬

2006 次点击
所在节点    MySQL
10 条回复
eason1874
2021-12-08 02:32:46 +08:00
前端传过来的参数你不要直接用,过滤和判断,把 -1 的过滤掉
ltltfuture
2021-12-08 02:53:48 +08:00
看看我这理解的对不对
比如你要写
SELECT createTime, billName, billCategory, billAccount
FROM Bill
后面加上
WHERE
(billCategory <> -1 or billCategory=“你传入的参数” )
AND
后面依次加上其他列...
aragakiyuii
2021-12-08 07:21:38 +08:00
代码里把 -1 过滤掉不就行了…
thetbw
2021-12-08 08:56:29 +08:00
这部就是 mybatis 的 if 吗
<if test="billCategory!= null and billCategory!=-1">
and bill_category = #{billCategory}
</if>
dream4ever
2021-12-08 08:59:45 +08:00
最原始的方式,就是手动拼装 SQL 语句嘛。
onhao
2021-12-08 11:26:30 +08:00
楼主看来是不想在程序里处理, 直接在 mysql 里咯, 那么我这里有一个办法不知楼主敢不敢用!
https://wuhao.pw/archives/268/
这方法可能争议很大的 , 用函数来实现,自定义一个函数 来处理这个特定值。^_^
raptor
2021-12-08 11:45:10 +08:00
SELECT createTime, billName, billCategory, billAccount
FROM Bill
WHERE
(:billCategory = -1 or billCategory=:billCategory)

然后把输入值传给:billCategory 这个参数即可。
Tenlearn
2021-12-08 14:07:50 +08:00
@onhao 敢用,月底就领工资走了,很安详
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 会在编译期直接优化掉。
gesse
2021-12-08 18:06:44 +08:00
你个人像事情逻辑有点问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX