Объединение двух операторов MySQL Select, чтобы я мог отсортировать полученные данные - PullRequest
0 голосов
/ 27 августа 2009

Мне было интересно, есть ли способ упростить это с двух запросов до одного. Я хотел бы иметь возможность сортировать данные по мере их извлечения из базы данных, и это позволило бы мне это сделать.

Таблицы настроены так:

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;

Затем, просматривая результаты этого запроса, я запускаю второй запрос, используя fileID, полученный в результате первого запроса ($ 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

1 Ответ

1 голос
/ 27 августа 2009

Я думаю, что это должно работать:

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» в таблицу файлов? Если, возможно, вы не обмениваетесь файлами между несколькими доменами, в этом случае это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...