sql >> Database teknologi >  >> RDS >> Mysql

Rekursiv logik i PHP + MySQL

Brug af en forespørgsel for hver rekursionstype, samlet.

De ugentlige og månedlige rekursioner bruger et par krydsforbundne forespørgsler til at generere en række tal, der skal føjes til datoen. Dette klarer op til 1000 gentagne aftaler, men kan nemt udvides til flere (hvis aftalerne vil gentages i mere end ~20 år).

SELECT a.appoinemnt_id, a.user_id, a.recur_type, a.date AS appoint_date
FROM tbl_appointment a
WHERE a.recur_type = 0
HAVING appoint_date BETWEEN '2014-07-01' AND '2014-07-31'
UNION
SELECT a.appoinemnt_id, a.user_id, a.recur_type, DATE_ADD(a.date, INTERVAL units.i + tens.i * 10 WEEK) AS appoint_date
FROM tbl_appointment a
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens
WHERE a.recur_type = 1
HAVING appoint_date BETWEEN '2014-07-01' AND '2014-07-31'
UNION
SELECT a.appoinemnt_id, a.user_id, a.recur_type, DATE_ADD(a.date, INTERVAL units.i + tens.i * 10 MONTH) AS appoint_date
FROM tbl_appointment a
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens
WHERE a.recur_type = 2
HAVING appoint_date BETWEEN '2014-07-01' AND '2014-07-31'

SQL violin til dette her:-

http://www.sqlfiddle.com/#!2/6346a2/2




  1. Sådan får du id fra databasen ved klik på listevisningselement i Android

  2. MySQL - Hvorfor ignoreres COLLATION-reglerne af LIKE-operatoren for tysk ß-tegn

  3. Brugerdefinerede grafer til at overvåge dine MySQL-, MariaDB-, MongoDB- og PostgreSQL-systemer - ClusterControl Tips &Tricks

  4. Få første dag i ugen i MySql ved hjælp af uge nr