J'ai aujourd'hui une base de données avec 3 requêtes pour les statistiques dans les cas de test. J'utilise php pour créer un site web mais les requêtes sont trop longues à exécuter, donc je ne peux pas afficher les statistiques complètes du site comme je ne le ferais pas. Comme il est maintenant la base de données est rarement mise à jour par lots afin que je puisse faire des événements qui met à jour les bases de données quotidienne/hebdomadaire à cette fin.Requête d'insertion SQL imbriquée
J'ai les 3 requêtes suivantes aujourd'hui pour afficher les informations que je veux:
SELECT key FROM testcase GROUP BY key;
Cela me donne une liste int de 4-10 groupes de tests. disons 1,2,3,4 pour le cas de l'argument. J'itérer alors ce dans les sous-requêtes comme clé pour obtenir le nombre de tests passés et le nombre de tests non passés avec les 2 requêtes suivantes:
SELECT COUNT(*) AS passed FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid WHERE pass = 1 AND key = %value%;
et
SELECT COUNT(*) AS failed FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid WHERE pass = 0 AND key = %value%;
Voici comment cela fonctionne aujourd'hui . Les requêtes prennent environ 25 à 30 secondes pour chaque clé, ce qui entraîne l'expiration du site. Au lieu de cela, je pensais à une requête sql qui l'a ajoutée à une table de base de données composée de tables clés, pass, fail que je remplis tous les jours/toutes les semaines. montrer sur le site comme des statistiques. J'ai vu quelques cas où vous pouvez itérer avec une sous-requête mais comme les 2 requêtes exécutées sont opposées, je ne vois aucune solution pour cela.
J'ai essayé d'indexer les valeurs que j'utilise dans les requêtes sans succès (ce qui pourrait également être faux).
// Andreas (de novice SQL)
Edit:
Oh le dilemme, où fixer la solution, je fait une moissonneuse-batteuse de Gordon et Joe pour faire la requête la plus rapide qui a fonctionné comme un charme:
INSERT INTO statistics (key,passed,failed)
SELECT
key,
SUM(case when T.pass = 1 then T.matches else 0 end) as passed,
SUM(case when T.pass = 0 then T.matches else 0 end) as failed
FROM
(SELECT
key,pass,COUNT(*) AS matches
FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid
GROUP BY key,pass)T
GROUP BY key
est-il possible d'insérer la clé dans le slot% value% en utilisant la requête sql? Je pense quelque chose dans le sens de INSERT dans statistcis (key, pass, fail) suivi de cette requête. – Andreas
hmm, Le second semble prometteur, mais je reçois un délai dans phpMyAdmin, je vais essayer de travailler demain avec mysqlquerybrowser et un accès direct. ajouté la requête _where (clé SELECT FROM testcase GROUP BY clé) _ et en essayant cela. – Andreas