Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie o powtarzające się zdarzenia mySQL

Oto coś, z czym się bawiłem (a tutaj jest to sqlfiddle z niektórymi przykładowymi danymi) ... nie jestem tego w 100% pewien, ale powinien pobrać dane z ostatnich 7 dni. Zauważ, że używam MySQL DATETIME w porównaniu ze znacznikami czasu liczb całkowitych, ale powinieneś być w stanie to łatwo przekonwertować (do testowania zapytania znacznie łatwiej było użyć dat ciągów).

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zrobić stronicowanie danych JSON w PHP?

  2. Wspólne filtrowanie w MySQL?

  3. Dynamiczne nazwy tabel/jednostek w Doctrine 2

  4. Sprawdź błędy zapytań kodu inicjatora zamiast pokazywać je użytkownikowi

  5. Czy zagnieżdżone transakcje są dozwolone w MySQL?