2009-08-27 9 views
0

Je me demandais s'il existait un moyen de simplifier cela de deux requêtes à une seule. J'aimerais pouvoir trier les données en les retirant de la base de données, ce qui me permettrait de le faire.Combinaison de deux instructions Select de mysql pour trier les données résultantes

Les tableaux sont configurés comme:

table: files 
------------------------ 
fileID (INT) | domainID (INT) 
------------------------ 

table: domains 
------------------------ 
domainID (INT) | domainName (text) 
------------------------ 

table: serverFiles 
------------------------ 
fileID (INT) | uniqueUploads (INT) 
------------------------ 

Je suis actuellement cette première requête:

SELECT domains.domainName, files.fileID, COUNT(files.fileID) 
FROM domains, files 
WHERE files.domainID = domains.domainID 
GROUP BY files.domainID; 

en boucle ensuite à travers les résultats de cette requête, je me présente une deuxième requête en utilisant le fileID résultant à partir de la première requête ($ fileIDFromFirstQuery):

SELECT serverFiles.uniqueUploads 
FROM serverFiles 
WHERE serverFiles.fileID = '$fileIDFromFirstQuery'; 

Les résultats sont publiés comme:

Domains  | Files with Domain | Unique Uploads 
-------------------------------------------------- 
domain1.com   32    1412 
domain2.com   21    699 
domain3.com    52     293 
+0

Merci Eric, ça a fonctionné à merveille. Vous avez répondu si vite !! – salonMonsters

Répondre

1

Je pense que cela devrait fonctionner:

SELECT domains.domainID, domainName, COUNT(*), SUM(uniqueUploads) 
FROM domains 
INNER JOIN files ON files.domainID = domains.domainID 
INNER JOIN serverFiles on serverFiles.fileID = files.fileID 
GROUP BY domains.domainID, domainName 

ETA:

Peut-être que je ne suis pas tout voir, mais pourquoi ne pas simplement se débarrasser de la table et de mettre ServerFiles " uniqueUploads "sur la table des fichiers? À moins que vous ne partagiez peut-être des fichiers entre plusieurs domaines, dans ce cas, cela aurait du sens.

Questions connexes