sql >> Database >  >> RDS >> Mysql

Recursieve logica in PHP + MySQL

Een query gebruiken voor elk recursietype, samengevoegd.

De wekelijkse en maandelijkse recursie gebruiken een aantal kruislings samengevoegde zoekopdrachten om een ​​reeks getallen te genereren die aan de datum kunnen worden toegevoegd. Dit kan tot 1000 herhaalde afspraken aan, maar kan eenvoudig worden uitgebreid tot meer (als de afspraken meer dan ~20 jaar herhaald willen worden).

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-viool hiervoor hier:-

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




  1. Google Data Studio &AWS MySQL SSL-verbinding

  2. Maak een nieuwe gebruiker in MySQL en geef deze volledige toegang tot één database

  3. Automatische conversie van SQL-query naar ElasticSearch-query

  4. Hoe genereer ik een willekeurig getal voor elke rij in een T-SQL-selectie?