sql >> Databáze >  >> RDS >> Mysql

mySQL dotaz na opakující se události

Tady je něco, s čím jsem si hrál (a tady je to jako sqlfiddle s nějakými ukázkovými údaji)... nejsem si tím 100% jistý, ale měl by získat data za posledních 7 dní. Všimněte si, že používám MySQL DATETIME oproti celočíselným časovým razítkům, ale měli byste být schopni je snadno převést (pro testování dotazu bylo mnohem jednodušší použít data řetězce).

SELECT *
  FROM
    (SELECT 
      *, 
      CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', DAY(start)) AS monthly,
      CONCAT(YEAR(NOW()), '-', MONTH(start), '-', DAY(start)) AS yearly
      FROM events
    ) tmp
  WHERE
    (
      (recurring = 'none')
      OR (recurring = 'daily')
      OR (recurring = 'weekly')
      OR (
        recurring = 'monthly'
        AND (
          (
            monthly >= NOW()
            AND monthly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
          OR (
            DATE_ADD(monthly, INTERVAL 1 MONTH) >= NOW()
            AND DATE_ADD(monthly, INTERVAL 1 MONTH) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
        )
      )
      OR (
        recurring = 'yearly'
        AND (
          (
            yearly >= NOW()
            AND yearly <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
          OR (
            DATE_ADD(yearly, INTERVAL 1 YEAR) >= NOW()
            AND DATE_ADD(yearly, INTERVAL 1 YEAR) <= DATE_ADD(NOW(), INTERVAL 7 DAY)
          )
        )
      )
    )
    AND start <= NOW()
    AND (
      end IS NULL 
      OR end >= DATE_ADD(NOW(), INTERVAL 7 DAY)
    )


  1. Sloučit a seřadit dvě výmluvné sbírky?

  2. Proveďte více dotazů na odstranění SQL v mysql pro php

  3. Moje webhostingová společnost říká, že s kódem PHP není něco v pořádku

  4. Zkrácení dat:Nesprávná hodnota data a času:''