mysql - PHP 嵌套循环 - 根据每周可用时间获取生产订单准备日期

标签 mysql loops nested composer-php

我已经为此奋斗了好几天但没有成功:( 我有一个生产订单 list ,其中的订单需要一定的时间才能完成。

然后我有一个单独的表,其中包含每周可用时间,例如 w52/2018 - 340h。

我需要循环遍历订单行和每周可用时间,并计算每个订单行的准备日期。

在代码中,大写字母的注释是我正在努力解决的问题。并且可能还有其他事情也完全错误。

 $year = date("Y");
 $week = date("W");

 //outer loop query - loops through production order rows (every row has 
 production time hours needed for the row)
 $db->setQuery("
SELECT a.*
  FROM work_orders AS a 
 ORDER 
    BY a.id ASC
");
 $results_work_order = $db->loadObjectList();

 //inner loop query (loops through weeks database table where weekly 
 available production hours are retrieved)
 $db->setQuery("SELECT a.work_hours_per_week FROM work_schedule AS a 
 WHERE a.year >= " .$year ." AND a.week >= " . $week ." ORDER BY a.year, 
 a.week ASC");  
 $results_work_hours = $db->loadObjectList();


 foreach ($results_work_order as $result_work_order) {

foreach ($results_work_hours as $result_work_hours) {

//gets the amount of hours needed to complete the order
$work_order_hours_left = $result_work_order->work_order_hours_left;

//gets weekly available hours starting from current week
$weekly_hours = $result_work_hours->work_hours_per_week;


//if weekly available hour are greater than hours needed for current order row...
if($weekly_hours > $work_order_hours_left) {

    //gets ready weekday: divides current row hours with weekly hours and rounds (e.g. 150 / 330 = 0.45), 0.45 * 7 = 3.15, rounded up = 4 = Thursday
    $ready_weekday = roundup(($work_order_hours_left / $weekly_hours) * 7), 0)

    //HOW TO GET DATE FOR THE WEEK/YEAR's THURSDAY (CALCULATED READY DATE)
    $calculated_ready_date=???

    //updates the production order row's calculated ready date
    $db->setQuery("UPDATE work_orders SET calc_ready_date  = " . $db->Quote($calculated_ready_date) . " 
    WHERE id = " . $db->Quote($result_outer->id));
    $db->query();

    //SHOULD CONTINUE TO NEXT OUTER LOOP AND KEEP THE HOURS LEFT FROM THIS WEEK TO NEXT PRODUCTION ORDER ROW
    //NEXT INNER LOOP SHOULD CONTINUE WHERE IT LAST LEFT OFF 


    } else {
    //weekly available hours are smaller than hours needed for current production order row

    //SHOULD GET THE WEEKLY HOURS FROM PREVIOUS WEEK AND ADD HOURS FROM CURRENT WEEK, THEN CHECK IF THESE ARE ENOUGH TO FINISH CURRENT PRODCUTION ORDER
    //GETS THE READY DATE SIMILAR WAY AS IF THE CODE BEFORE "ELSE" ??? HOW???

       }

    }

}

如果您能帮助我走上正确的道路,我将非常感激。

谢谢! 劳拉

最佳答案

从周数和年份获取日期

$calculated_ready_date = date( "l, M jS, Y", strtotime($year."W".sprintf("%02u", $week)."1") ); 

在这种情况下,您将获得该周的第一天。您可以将数字 1 更改为 7 以获得一周的最后一天。

您可以使用break来结束内部循环或继续执行下一项。

关于mysql - PHP 嵌套循环 - 根据每周可用时间获取生产订单准备日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979919/

相关文章:

php - 切换mysql查询比较结果

php - (PHP MYSQLI) 使用 SELECT OR 时出现奇怪的 'No index used' 错误

php - 使用 PDO 在 PHP 中使用函数更新值

C++程序,使用嵌套循环设计

mysql - 嵌套sql语句并选择(MySQL)

mysql - LEFT JOIN 和 COUNT 两个查询的区别

python - 包含 2 个元素和一个 zip 的循环

python - 收集通过随机采样其他数据帧构建的数据帧的汇总统计信息

c++ - 我如何处理迭代的最后一个元素

tree - 教义2 : Tree - Nestedset and InnoDB