J'ai essayé d'optimiser la manière dont je récupère datatables de ma database pour les afficher sur une page de type "tableau de bord" pour le développement de logiciels
Ma structure de database est la suivante:
Je voudrais interroger ces deux tables pour me fournir un set de résultats qui contient individuellement les exigences DEV Complete, Test Complete et Release Complete par window de tâche DEV dans une seule requête. Je suis en train d'effectuer plusieurs requêtes contenant chacune des sous-requêtes, puis agréger les résultats avec PHP, mais cela prend au total 15 sec à exec, Quelqu'un peut-il m'aider s'il vous plaît dans la consolidation d'une seule requête>
SELECT r.REQ_ID, SUM(CASE WHEN t.TASK_NAME = 'DEV' THEN 1 ELSE 0 END) AS DevComplete, SUM(CASE WHEN t.TASK_NAME = 'TEST' THEN 1 ELSE 0 END) AS TestComplete, SUM(CASE WHEN t.TASK_NAME = 'RELEASE' THEN 1 ELSE 0 END) AS ReleaseComplete FROM Requirements r INNER JOIN Tasks t ON r.REQ_ID = t.REQ_ID WHERE t.TASK_STATUS = 'Complete' GROUP BY r.REQ_ID
Je réalise que c'est une vieille question mais j'ai fait un test avec les templates suivants:
Modèle 1:
SELECT [Count1] = SUM(CASE WHEN ... THEN 1 ELSE 0 END), [Count2] = SUM(CASE WHEN ... THEN 1 ELSE 0 END) FROM [Table] GROUP BY [Field]
Motif 2:
SELECT [COUNT1] = (SELECT COUNT(*) FROM [Table] WHERE ...), [Count2] = (SELECT COUNT(*) FROM [Table] WHERE ...)
Dans mon cas, lors de l'exécution des deux requêtes, le motif 2 prenait 36% du time et le motif 1 prenait 64%. Pour moi, le motif 1 semble plus élégant, mais il n'a pas été aussi performant dans mon scénario.