2016-03-28 4 views
0

У меня проблемы с COUNT. Мне нужно подсчитать файлы и папки на хранилище. Вот моя структура.MySQL Query Two (COUNT)

DATABASE 

STORAGE 
    storage_id storage_name 
    1    SERVER 01 


FOLDERS 
    folder_id folder_storage_id folder_name 
    1   1     EXAMPLE FOLDER 

FILES 
    file_id file_folder_id file_name 
    1   1     test.pdf 
    2   1     test2.pdf 
    3   1     test3.pdf 
    4   1     test4.pdf 


QUERY 

SELECT *, 

folder_storage_id AS folder_id, COUNT(*) AS folder_qty, 

file_folder_id AS file_id, COUNT(*) AS files_qty 

FROM 
files 

LEFT JOIN 
folders ON folder_id = file_folder_id 

LEFT JOIN 
storage ON storage_id = folder_storage_id 

Я получаю такое же значение (4) за $ folder_qty и $ files_qty

ОЖИДАЕМЫЕ

($ folder_qty) 1

($ files_qty) 4

ответ

2

Попробуйте это:

SELECT 
    COUNT(DISTINCT folder_storage_id) AS folder_qty, 
    COUNT(*) AS files_qty 
FROM 
    files 
LEFT JOIN 
    folders ON folder_id = file_folder_id 
LEFT JOIN 
    storage ON storage_id = folder_storage_id 
WHERE 
    storage_id = ? 

Нет смысла выбирать любые другие столбцы, поскольку выполняется агрегация.

0

Чтобы подсчитать количество идентификаторов и идентификаторов файлов для хранения, мы можем использовать group by с count() агрегированную функцию для идентификатора папки и id файла; попробуйте следующий запрос:

select s.storage_id, count(fo.folder_id), count(fi.file_id) 
from storage s left join folders fo on s.storage_id = fo.folder_storage_id 
left join files fi on fo.folder_id = fi.file_folder_id 
group by s.storage_id; 
1

Вы можете попробовать это:

SELECT 

COUNT(DISTINCT file_folder_id) as folder_qty, 
COUNT(file_id) as files_qty 

FROM 
storage s 
LEFT JOIN folders d ON s.storage_id = d.folder_storage_id 
LEFT JOIN files f ON d.folder_id = f.file_folder_id 

WHERE s.storage_id = 1 
+0

Ответа на Йоргос Betsos будет работать, если вы измените COUNT (DISTINCT folder_storage_id) для COUNT (DISTINCT folder_id) – Gimeniux

+0

Ответа на Даршан Мехта будет работать если вы меняете count (fo.folder_id) на count (разное fo.folder_id) – Gimeniux