2009-08-27 11 views
0

これを2つのクエリから1つのクエリに単純化する方法があるのだろうかと思いました。データをデータベースから取り出す際にデータを並べ替えることができるようにしたいと思います。2つのmysql Select文を組み合わせて結果のデータをソートすることができます

のようなテーブルが設定されている:私は現在、最初にこのクエリを実行しています

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

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

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

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

は、その後、私はファイルID結果を用いて、第2のクエリを実行している、そのクエリの結果をループ最初のクエリ($ fileIDFromFirstQuery)から:

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

結果が出ます以下のような:

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

ありがとうエリック、それは美しく働いた。あなたはとても速く答えました! – salonMonsters

答えて

1

私は、これは動作するはずだと思う:

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:

は「たぶん私はここにすべてを見ていないんだけど、なぜ単にserverFilesテーブルを取り除くと入れませファイルテーブルの "uniqueUploads"?おそらく、複数のドメイン間でファイルを共有している場合を除き、そうであれば理にかなっています。

関連する問題