【发布时间】:2018-12-03 12:06:12
【问题描述】:
我真的坚持这个。
我有一张有合同的桌子,还有一张有物品的桌子。
我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, Im 在所选日期范围内的每一天都在做一个 while 循环并使用此查询
$itemQty = ContItems::find()
->where(['ITEMNO' => $itemNo])
->andWhere(['<=' , 'HIREDATE' , $today])
->andWhere(['>=' , 'ESTRETD' , $today])
->andWhere(['or',
['STATUS' => 0],
['STATUS' => 1]
])
->SUM('QTY');
它工作正常,但我想检查我在所选日期范围内每天拥有的每个项目,如果我这样做,查询数量会上升到 50k+。
我试图做的是选择日期范围内的每个合约并存储在一个数组中 每份合同都有开始和结束日期,我想选择开始或结束日期在我指定的日期范围内的每份合同。
$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”字段。
我有一个包含我想要检查的所有项目编号的数组。 预期结果是,如果我检查的日期介于合同开始日期和结束日期之间,则将项目数量相加。
【问题讨论】:
-
我还不清楚。您能否也提供示例数据和预期输出?