Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

matheusmarson

Consulta mysql ordenada por registros de 3 tabelas

Recommended Posts

Senhores



Necessito fazer uma consulta mysql que deve me retornar o nome do fabricante e as 4 categorias de produtos deste fabricante que mais tiverem produtos registrados na tabela de produtos, ou seja, preciso do fabricante de suas 4 categorias com mais produtos



Seria:


Fabricante


-> categoria 1 (20 itens)


-> categoria 2 (17 itens)


-> categoria 3 (15 itens)


-> categoria 4 (13 itens)



As tabelas seria:


Fabricantes (id, nome)


Categorias (id, categoria)


Produtos (id, titulo, id_categoria, id_fabricante)



Como poderia montar esta consulta?



Estou tentando algo do tipo, mas isso está agrupando as categorias dos fabricante



SELECT f.id, f.nome_fantasia, c.categoria, c.id as id_categoria

FROM produtos p, produtos_categorias c, fabricantes f

WHERE p.id_categoria = c.id AND p.id_fabricante=f.id

GROUP BY f.id, c.id

ORDER BY f.nome_fantasia, COUNT(c.categoria)


Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejamos se entendi, você quer saber qual a quantidade de cada categoria...

 

Só faltou uma coisa na consulta que criou:

SELECT
  f.id,
  f.nome_fantasia,
  c.categoria,
  c.id as id_categoria,
  COUNT(c.categoria) AS quantidade_categoria
FROM produtos p, produtos_categorias c, fabricantes f
WHERE p.id_categoria = c.id AND p.id_fabricante=f.id
GROUP BY f.id, c.id
ORDER BY f.nome_fantasia, COUNT(c.categoria) # ou {ORDER BY f.nome_fantasia, quantidade_categoria}, também funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT f.id, f.nome_fantasia, c.categoria, c.id as id_categoria,

COUNT(c.categoria) qtd

FROM produtos p, produtos_categorias c, fabricantes f

WHERE p.id_categoria = c.id AND p.id_fabricante=f.id

GROUP BY f.id, f.nome_fantasia, c.categoria, c.id

ORDER BY f.nome_fantasia, c.categoria, COUNT(c.categoria)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei bem isso que eu necessitava

Preciso que a query me retorne essa estruttura?:

 

->Fabricante 1

-->categoria 1 (a categoria com mais produtos do fabricante 1)

-->categoria 2 (a 2ª categoria com mais produtos do fabricante 1)

-->categoria 3 (a 3ª categoria com mais produtos do fabricante 1)

 

->Fabricante 2

-->categoria 1 (a categoria com mais produtos do fabricante 2)

-->categoria 2 (a 2ª categoria com mais produtos do fabricante 2)

-->categoria 3 (a 3ª categoria com mais produtos do fabricante 2)

 

->Fabricante 2

-->categoria 1 (a categoria com mais produtos do fabricante 2)

-->categoria 2 (a 2ª categoria com mais produtos do fabricante 2)

-->categoria 3 (a 3ª categoria com mais produtos do fabricante 2)

 

E assim para todos os fabricantes cadastrados

Ou seja listar todos os fabricantes e as categorias que mais tem produtos de cada um

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT f.id, f.nome_fantasia, c.categoria, c.id as id_categoria,

COUNT(c.categoria) qtd

FROM produtos p, produtos_categorias c, fabricantes f

WHERE p.id_categoria = c.id AND p.id_fabricante=f.id

GROUP BY f.id, f.nome_fantasia, c.categoria, c.id

ORDER BY f.nome_fantasia, COUNT(c.categoria) desc

Compartilhar este post


Link para o post
Compartilhar em outros sites
matheusmarson , isto todo sql vai fazer (repetir) , a parte que gera o relatório e que trata isto 9siar no formatao do post #4)
E deveria mostrar apenas 3 categorias por fabricantes

Creio que o LIMIT faz isto, não sei se faz num group by

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei fazer esta limitação do grupo no Mysql , no Oracle existem Analytic Functions que permitem fazer isto de forma fácil

 

Veja se o Google te ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mota, esta consulta que indicou faz a ordenação como preciso, porém não me limita a 4 registros por fabricante. Tem alguma idéia? Preciso de apenas 4 categorias por fabricante.

 

SELECT f.id, f.nome_fantasia, c.categoria, c.id as id_categoria,
COUNT(c.categoria) qtd
FROM produtos p
, produtos_categorias c, fabricantes f
WHERE p
.id_categoria = c.id AND p.id_fabricante=f.id
GROUP BY f
.id, f.nome_fantasia, c.categoria, c.id
ORDER BY f
.nome_fantasia, COUNT(c.categoria) desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

 

 

Não, em Mysql não, no Oracle tem uma function que facilita isto , já fiz relatórios com uma restrição destas.

 

Tente achar se existem agregadoras com as Analytic Functions no Mysql.

 

Talvez usando variáveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.