基于过滤器值的MySQl查询

w3nuxt5m  于 2023-04-10  发布在  Mysql
关注(0)|答案(2)|浏览(132)

我有一个表单,其中包含一些字段(语言,DateFrom,Dateto,状态).有一个提交按钮.我想根据这些字段上填写的值获取数据.我的查询忽略未填写的字段.我怎么能写查询.

Select * from tbldep where (language='$language') AND ( Date between '$Datefrom' AND '$Dateto')AND (status='$status')

我的查询忽略了没有填充的值。假设用户没有在DateFrom字段中填充日期的值,在这种情况下,查询应该获取所有小于DateTo值的记录。

myzjeezk

myzjeezk1#

IFNULL。如果没有日期,请将空值替换为默认值,以获取所需的数据。

Select * 
  from tbldep 
  where (language='$language') 
    AND ( Date between IFNULL('$Datefrom', '1900/01/01') AND '$Dateto')
    AND (status='$status')
e4yzc0pl

e4yzc0pl2#

您可以使用布尔逻辑-尽管表达起来有点冗长:

select * 
from tbldep 
where (:lang    is null or language = :lang) 
  and (:dt_from is null or date    >= :dt_from)
  and (:dt_to   is null or date    <= :dt_to)
  and (:stat    is null or status   = :stat)

请注意,这使用绑定参数(带有:前缀)而不是字符串连接来构建查询(这是不可靠和不安全的)。

相关问题