Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用选项生成查询_Php_Mysql - Fatal编程技术网

Php 使用选项生成查询

Php 使用选项生成查询,php,mysql,Php,Mysql,我需要在MySQL中进行查询。 但是查询需要通过用户选择的选项进行友好查询 选项有日、月、年和SellerID 用户将选择是否要按、天、月和年查看卖家的销售历史记录 但是,假设他希望看到2012年3月的所有销售情况。他将在当天留白,并从3月1日到3月31日收到所有销售额 也许他会将月份选项留空,并设置Day=15和Year=2012,他将获得2012年全年的销售历史记录,并且只获取每个月的第15天 我的程序需要构建一个查询,精确地覆盖他想要查看的内容 问题是: 我真的需要在我的代码上使用数千个I

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

选项有日、月、年和SellerID

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

但是,假设他希望看到2012年3月的所有销售情况。他将在当天留白,并从3月1日到3月31日收到所有销售额

也许他会将月份选项留空,并设置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...
if($day==0)&&($month==0)&&($year>0)){

$query.=“`date`>='{$year}-01-01'和`date`='{$year}-{$month}-01'和`date`您可以在使用这些值之前对它们进行预处理:

$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
);

限制对月份、月份、日期格式或月份、年月格式或年份格式进行排序,意味着在层次结构中对排序进行分级,并在此需要处理3个案例,这将简单地在两个WHERE子句日期> = DyrimeStaskSturyDATE和DATEI中感谢您有一些错误检查。但是,我鼓励您考虑和。e为每个参数使用下拉菜单?不是日历小部件?重新考虑UI一些可能也会使这更容易。正常的默认值和良好的界面可能会允许您在控制器上编写您想要的内容,而无需在控制器上编写太多逻辑。感谢您指出SQL注入,我知道它的存在,但我的系统将用于授权人员只有,而且他们不会把自己的数据库搞砸。

between
函数阻止它来处理我的第二个例子,但是它比
好得多。如果
,我会用它,谢谢如果他把
月份
留空,只设置
,他会得到全年的销售历史记录,而不是想要的那一天每月一次@rid@BernaMariano,x和y之间的
类似于
..>=x和…=/是的,我将使用你的答案,在这种情况下,我将使用
IF
仅打印所需的日期…谢谢again@BernaMariano,当然,如果你需要特殊情况,你可以改变这种逻辑。主要的想法是你可以做这件事在构建查询之前,h更容易。一旦查询完成,值已经正确填充,您可以继续填写它们。