我真的很喜欢这个。
我有一张带合同的桌子,一个带物品的桌子。
我m trying to achieve is to see the total quantity of an item on contracts in a date range for every day.
For example, item1 appears on 3 contracts on Monday and the total quantity is 30.
Currently, I
在选定日期范围内每天使用查询进行一次while循环
$itemQty = ContItems::find()
->where(['ITEMNO' => $itemNo])
->andWhere(['<=' , 'HIREDATE' , $today])
->andWhere(['>=' , 'ESTRETD' , $today])
->andWhere(['or',
['STATUS' => 0],
['STATUS' => 1]
])
->SUM('QTY');
它工作正常,但我想检查在选定日期范围内每天的每一件物品,如果这样做,查询数量最多可以超过5万。
我试图做的是在日期范围内选择每个合约并存储在数组中 每个合同都有开始和结束日期,我想选择开始或结束日期在我指定的日期范围内的每个合同。
$ContItemsArray = ContItems::find()
->where(['or',
['<=' , 'HIREDATE' , $dateFrom],
['<=' , 'HIREDATE' , $dateTo],
['>=' , 'HIREDATE' , $dateFrom],
['>=' , 'ESTRETD' , $dateTo],
['>=' , 'ESTRETD' , $dateFrom]
])
->andWhere(['or',
['STATUS' => 0],
['STATUS' => 1]
])
->asArray()
->all();
并使用此代码计算数量
$theQty = 0;
foreach ($ContItemsArray as $subArray)
{
if ($subArray['ITEMNO'] == $itemNo && ($subArray['HIREDATE'] <= $today && $subArray['ESTRETD'] >= $today) && ($subArray['STATUS'] <= 1))
{
$theQty += $subArray['QTY'];
}
else
{
$theQty += 0;
}
}
但是它返回的数字不正确,由于某种原因合同缺失,我无法弄清楚原因。 我试图更改$ ContItemsArray的查询,但是没有运气。 我希望我对这个问题足够清楚。 我将不胜感激。
编辑: ContItems表包含所有合同,合同编号为“ ITEMNO”,开始日期为“ HIREDATE”,结束日期为“ ESTRETD”,数量为“ QTY”字段。
我有一个数组,其中包含要检查的所有项目编号。 预期的结果是,如果我检查的日期在合同的开始日期和结束日期之间,则对项目的数量求和。
答案 0 :(得分:0)
我解决了这个问题,不得不在表中的日期(HIREDATE,ESTRETD)上使用date('Y-m-d')和strtotime,现在工作正常了