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

nå hukommelsesgrænsen med løkke inde i løkke inde i løkke

Jeg ville generere en række dage og slutte mig til din sæsontabel og bruge en enkelt forespørgsel for at få det ønskede resultat, f.eks.:

SELECT dates.Date,
       coalesce(s.price, 0) AS price
FROM
  (SELECT a.Date
   FROM
     ( SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date, '0' AS price
      FROM
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS a
      CROSS JOIN
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS b
      CROSS JOIN
        (SELECT 0 AS a
         UNION ALL SELECT 1
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
         UNION ALL SELECT 5
         UNION ALL SELECT 6
         UNION ALL SELECT 7
         UNION ALL SELECT 8
         UNION ALL SELECT 9) AS c) a
   WHERE a.Date BETWEEN '$from' AND '$to'
   ORDER BY a.Date) dates
LEFT JOIN seasons s ON dates.Date BETWEEN s.start AND s.END

Den komplicerede indre forespørgsel undgår oprettelsen af ​​en midlertidig tabel (taget fra generate dage fra datointerval ) og virker i op til 1000 dage, men det ville være fint at oprette en midlertidig tabel.



  1. Codeigniter-model med flere opdateringsbetingelser ved hjælp af manual where-erklæring

  2. Vigtige sundhedstjek for dine MySQL-kilde-replikservere

  3. Hvordan får man adgang til mysqli-forbindelse i en anden klasse på en anden side?

  4. Vælg Forælder og børn med MySQL