1

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...
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

YEAR、MONTH、DATE形式またはMONTH、YearMonth形式またはYear形式での並べ替えの制限は、階層での並べ替えを平準化することを意味します。そのためには、2つのWHERE句で単純に機能する3つのケースを処理する必要があります。DATE> = DYNAMIC_START_DATE AND DATE < = DYNAMIC_END_DATE(ここでもBETWEENを使用できます)

  • 年のみが指定されている場合は、開始日を1月1日、終了日を12月31日に設定する必要があります。
  • 月と年が指定されている場合は、開始日を1か月年、終了日を[2830/31]月年に設定する必要があります。
  • 日付と月と年のみが指定されている場合は、開始日を日付月年として設定し、終了日を日付月年として設定する必要があります。
于 2012-11-09T19:33:51.753 に答える