Php DB查询以获取具有最高优先级用户的时间块

Php DB查询以获取具有最高优先级用户的时间块,php,database,loops,Php,Database,Loops,对于我的服务,我有一个表,显示谁在这段时间使用它。它包括列 customer | start_date | end_date | priority 优先级可以是低、中或高 例如,客户丈夫和妻子在一个月内使用具有上述优先级的服务 丈夫和妻子使用如下服务 customer start_date end_date priority ----------------------------------------------- Husband 2019-11-01 2

对于我的服务,我有一个表,显示谁在这段时间使用它。它包括列

customer | start_date  | end_date | priority    
优先级可以是低、中或高

例如,客户
丈夫
妻子
在一个月内使用具有上述优先级的服务

丈夫和妻子使用如下服务

customer     start_date end_date    priority
-----------------------------------------------
Husband      2019-11-01 2019-11-04  High   
Husband      2019-11-05 2019-11-20  Low
Husband      2019-11-21 2019-11-30  Medium
Wife         2019-11-01 2019-11-06  Medium
Wife         2019-11-07 2019-11-25  High
Wife         2019-11-26 2019-11-30  Low
所以在月底,对于每个时间跨度,我必须推导出在这两个日期之间使用最高礼节的人,例如:

customer       start_date end_date      priority
----------------------------------------------
Husband        2019-11-01 2019-11-04    High    (priority value from husband)
Wife           2019-11-05 2019-11-06    Medium  (priority value from wife)
Wife           2019-11-07 2019-11-25    High    (priority value from wife)
Husband        2019-11-26 2019-11-30    Medium   (priority value from husband)

如何使用PHP实现这一点?

因此,如果我理解正确,您正试图从数据中提取时间跨度,从何时到何时,服务由谁以何种优先级使用

我建议您更改您的数据结构,使其更容易:

  • 创建一个包含列的表(例如名为
    usageperday
    客户|日期|优先级

    您应该将
    priority
    写成一个整数,
    1=低,2=中,3=高

  • 使用输入数据填写该表。比如说,

    Husband      2019-11-01 2019-11-04  High
    Wife         2019-11-01 2019-11-06  Medium
    
    你在表格中写下:

    Husband   2019-11-01  3
    Husband   2019-11-02  3
     ...
    Husband   2019-11-04  3
    Wife      2019-11-01  2
    Wife      2019-11-02  2
     ...
    Wife      2019-11-06  2
    
    。。。对于输入中的每一行,依此类推

  • 然后,对于每一天,从表中选择优先级最高的客户,因此使用如下SQL

    SELECT customer
    FROM usageperday
    WHERE priority = max(priority)
    GROUP BY date;
    
  • 最后,您可以为每个连续时间将该天数列表汇总为一行 块,如所述


    • 我找到了解决办法。下面是逻辑

      husbandlevels = getPrioritiesBYPid(husband);
      
      wifelevels = getPrioritiesBYPid(wife)
      
      FirstLevel = "";
      
      FirstDate = '';
      
      Loop through the days of the month {
      
                     FirstDate = ( FirstDate == '' ) ? TodayDate : FirstDate;
      
                     husbandLevel = getPriority(TodayDate,husbandlevels);
      
                     wifeLevel = getPriority(TodayDate,wifelevels);
      
                     FortodayLevel = (husbandLevel > wifeLevel ) ? 1 : 2;
      
                     if ( FortodayLevel != FirstLevel || FirstLevel != '' ) {
      
                                    // Insert in the table
      
                                    -- FirstDate,TodayDate - 1,FirstLevel
      
                                    FirstLevel = FortodayLevel;
      
                                    FirstDate = TodayDate;
      
                     }
      
      }
      

      到目前为止,您尝试了什么?是否涉及数据库?你的问题不清楚,范围太广,不知道是什么意思。请更具体地说“请给我提供一些有价值的建议。如何使用PHP来做到这一点”-如果你自己根本没有任何方法,那么我会说这是一个过于宽泛的问题。与这不是一个代码编写服务一样,这也不是一个你可以简单地“外包”你的整个算法开发工作的地方。伙计们,我知道这不是第一个没有任何研究的问题,但请记住,该用户是新用户,没有您在该网站的经验。用户3049475,他们是对的,但是如果你在这里发表文章,你应该展示你到现在为止的进步,因为这使得每个人都可以更容易地开始解决你的问题,而不浪费时间。我建议你通读这本指南以及如何写一篇文章。然后你可以回答这个问题,我相信会有解决办法的