1

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

选项是DayMonthYearSellerID

用户将选择是否要按天、月和年查看卖家的销售历史。

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

也许他将选项Month 保留为空白,并设置Day=15Year=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...
4

2 回答 2

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
);
于 2012-11-09T19:25:10.000 回答
0

RESTRICT SORTING ON YEAR, MONTH, DATE 格式或 MONTH、Year Month 格式或 Year 格式,意味着在层次结构中对您的排序进行分级,为此您需要在此处处理 3 个案例,这些案例仅适用于两个 WHERE 子句 DATE>=DYNAMIC_START_DATE 和 DATE< =DYNAMIC_END_DATE(您也可以在此处使用 BETWEEN)

  • 如果只给出年份,那么您应该将开始日期设置为 1 月 1 日,结束日期设置为 12 月 31 日
  • 如果给出了月份和年份,那么您应该将开始日期设置为第一个月,结束日期设置为 [2830/31] 月份年份
  • 如果只给出日期和月份和年份,那么您应该将开始日期设置为日期月份年份,并将结束日期设置为日期月份年份。
于 2012-11-09T19:33:51.753 回答