使用选项构建查询

时间:2012-11-09 19:21:29

标签: php mysql

我需要在MySQL中进行查询。 但是查询需要通过用户选择的选项进行动态查询。

选项包括& SellerID

用户将选择是否要按销售商,天,月和年查看销售历史记录。

但是,假设他想看到 2012年3月的所有销售额。他将 Day 留空并从3月1日到3月31日收到所有销售......

也许他将选项 Month 留空,并设置 Day = 15 Year = 2012 ,他将获得销售历史记录从2012年全年到每个月的第15天。

我的程序需要构建一个涵盖他想要查看的内容的查询。

问题是:
我真的需要在代码中使用数千个IF吗?有没有更好的方法呢?

if( ($day==0) && ($month==0) && ($year>0) ){

    $query.="`date`>='{$year}-01-01' AND `date`<='{$year}-12-31'";

}elseif( ($day==0) && ($month>0) && ($year>0) ){

    $query.="`date`>='{$year}-{$month}-01' AND `date`<='{$year}-{$month}-31'";

}elseif{

etc...

2 个答案:

答案 0 :(得分:3)

您可以在使用前预处理这些值:

$year  = $year  > 0 ? (int) $year  : 2012;
$month = $month > 0 ? (int) $month : 1;
$day   = $day   > 0 ? (int) $day   : 1;

$query .= sprintf("`date` BETWEEN '%4d-%2d-%2d' AND '%4d-%2d-%2d'",
    $year, $month, $day,
    $year, $month, 31
);

答案 1 :(得分:0)

限制分类年,月,日期格式或月,年月格式或年份格式,表示您在层次结构中排序等级,并且您需要处理3个案例,这些案例仅适用于两个WHERE子句DATE&gt; = DYNAMIC_START_DATE AND DATE&lt; = DYNAMIC_END_DATE(你也可以在这里使用BETWEEN)

  • 如果仅提供年份,则应将开始日期设为第1年1月和结束日期为第31个月。
  • 如果给出月份和年份,则应将开始日期设置为第一个月年度和结束日期为[2830/31]个月年度
  • 如果仅提供日期和月份和年份,则应将开始日期设置为日期月份年度,将结束日期设置为日期月份年份。