Avatar billede bigo Nybegynder
15. juli 2013 - 22:28 Der er 1 løsning

Gentagne events beregning i MySql

Hejsa.

Jeg prøver at finde ud af om en event rammer dags dato udfra start dato, interval og interval type.

f.eks.

SELECT
  mm.*,
    mm_recurrence_settings.*,
    CASE
        WHEN mm_recurrence_settings.mm_reoc_interval_type = 1 THEN DATE(DATE_ADD(mm_recurrence_settings.mm_reoc_start_date, INTERVAL mm_recurrence_settings.mm_reoc_interval HOUR))
        WHEN mm_recurrence_settings.mm_reoc_interval_type = 2 THEN DATE(DATE_ADD(mm_recurrence_settings.mm_reoc_start_date, INTERVAL mm_recurrence_settings.mm_reoc_interval DAY))
        WHEN mm_recurrence_settings.mm_reoc_interval_type = 3 THEN DATE(DATE_ADD(mm_recurrence_settings.mm_reoc_start_date, INTERVAL mm_recurrence_settings.mm_reoc_interval WEEK))
        WHEN mm_recurrence_settings.mm_reoc_interval_type = 4 THEN DATE(DATE_ADD(mm_recurrence_settings.mm_reoc_start_date, INTERVAL mm_recurrence_settings.mm_reoc_interval MONTH))
        WHEN mm_recurrence_settings.mm_reoc_interval_type = 5 THEN DATE(DATE_ADD(mm_recurrence_settings.mm_reoc_start_date, INTERVAL mm_recurrence_settings.mm_reoc_interval YEAR))
    END as newDate
FROM
    mm
LEFT JOIN mm_types USING (mm_type_id)
LEFT JOIN mm_recurrence_settings USING (mm_id)


Det virker sådan ok... næsten.. måske..
Det giver mig den næste nærmeste event dato fra startdatoen. Men ikke gentagelser frem til dags dato.

F.eks. et event startende 2012-01-31 og som kører hver 2 uge om torsdagen. Der får jeg - med ovenstående - 2012-02-16. Ville gerne have at den regnede sig frem til hver 2 uge om torsdagen - i denne eller næste uge (i forhold til d.d.)

Nogen der forstår hvad jeg siger ;-) og evt. har mulighed for at hjælpe mig på vej.

/Lars
Avatar billede bigo Nybegynder
17. juli 2013 - 10:50 #1
Fikset via PHP:

    /* Check for recurring window is legit */
        $interval_string ="P".$mm["mm_reoc_interval"];
        switch ($mm["mm_reoc_interval_type"])
        {
            case 1: $interval_string .= "H"; break;
            case 2: $interval_string .= "D"; break;
            case 3: $interval_string .= "W"; break;
            case 4: $interval_string .= "M"; break;
            case 5: $interval_string .= "Y"; break;
            default : $interval_string .= "D";
        }
   
        $start = DateTime::createFromFormat("Y-m-d H:i:s", $mm["mm_reoc_start_date"]." ".$mm["mm_reoc_start_hour"].":00");
        $end = DateTime::createFromFormat("Y-m-d H:i:s", $date_time);
        // This we need to fix from interval in db to interval DateInterval are able to read.
        $interval = new DateInterval($interval_string);
        $period = new DatePeriod($start,$interval,$end);
        foreach($period as $dt){
          $date_array[] = $dt->format("Y-m-d");
        }

        if(in_array($today, $date_array))
        {
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester