outer - Declaración de MySQL combinando un join y un conteo?
sql mysql (4)
Tengo una tabla de ''carpetas''. Quiero devolver todos los registros con el ID de usuario de 16.
SELECT * FROM `folders` WHERE userId = 16;
Tengo una tabla de ''archivos''. Para cada ''carpeta'' devuelta anteriormente, deseo devolver un recuento de ''archivos'' dentro de esa ''carpeta''.
SELECT COUNT(*) as "Files" FROM files WHERE Folder = n;
¿Cómo combino estos? Estoy perdido. ¡Gracias!
Haga una sub consulta que agrupe por carpetas para obtener el recuento por carpeta, luego únase a la primera consulta como esta:
select
f.*
fc.Files
from
Folders f
--
-- Join the sub query with the counts by folder
JOIN (select
Folder,
count(*) Files
from
files
group by
Folder ) as fc
on ( fc.Folder = f.Folder )
where
f.userid = 16
probablemente necesite usar GROUP BY y agruparlo por ID o tal:
SELECT
folders.*,
COUNT(files.*) as filetotal
FROM folders
LEFT JOIN files ON folders.ID=files.folderID
WHERE userId = 16
GROUP BY folders.ID
SELECT fol.*
, ( SELECT COUNT(*)
FROM files fil
WHERE fil.Folder = fol.Folder
) AS "Files"
FROM folders fol
WHERE fol.userId = 16
Se llama subconsulta correlacionada.
http://dev.mysql.com/doc/refman/5.1/en/correlated-subqueries.html
select
f.`folder`,
f.`userId`,
r.`count`
from
`folders` f
left join
(
select
`Folder`,
count(`id`) `count`
from `files`
group by `Folder`
) r
on r.`Folder`=f.`folder`
where
`userId`=16
si no quieres usar el grupo por declaración.
Tuve un problema similar en una lista de productos donde quería contar la clasificación por estrellas de un producto en otra tabla [1-5] y la cantidad de usuarios que votaron por ese producto específico.