Ir para conteúdo

POWERED BY:

Arquivado

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

Maykel-ctba

Inserir campo de outra tabela

Recommended Posts

Olá povo!

 

Eu tenho a seguinte consulta:

 

SELECT pro.* FROM sistema_produto pro WHERE pro.proAtivo = 'S' AND pro.proExcluido = 'N' AND pro.proTipo = 'P' ORDER BY pro.proNome ASC

 

Funciona perfeitamente.

 

Eu preciso adicionar um campo de outra tabela...

 

SELECT img.imgUrl, pro.* FROM sistema_produto pro, sistema_imagem img WHERE pro.proAtivo = 'S' AND pro.proExcluido = 'N' AND pro.proTipo = 'P' AND img.proId = pro.proId GROUP BY pro.proId ORDER BY pro.proNome ASC

 

OK... funciona.

 

Porém, meu sistema ainda tem um parâmetro de filtros que ao ser acionado agora, deu um erro que jamais vi:

 

SELECT img.imgUrl, pro.* FROM sistema_produto pro, sistema_imagem img WHERE pro.proAtivo = 'S' AND pro.proExcluido = 'N' AND pro.proTipo = 'P' AND proId in (SELECT spf.proId FROM sistema_produto_filtro spf, sistema_filtro sf WHERE spf.filId = sf.filId GROUP BY spf.proId HAVING (group_concat('X',sf.catFiltroId,'-',sf.filId,'X') LIKE '%X8-36X%')) AND img.proId = pro.proId GROUP BY pro.proId ORDER BY pro.proNome ASC

 

Erro:

 

#1052 - Column 'proId' in IN/ALL/ANY subquery is ambiguous

 

Como corrigir?

Compartilhar este post


Link para o post
Compartilhar em outros sites

#1052 - Column 'proId' in IN/ALL/ANY subquery is ambiguous

 

Qualifique tabela.coluna toda referência à coluna 'proId' pois ela existe em mais de uma coluna gerando ambiguidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm, eu vi alí que uma referencia estava faltando mesmo.

Funcionou! Mas achei o tempo de carregamento meio pesado:

 

Showing rows 0 - 6 (7 total, Query took 1.4853 sec)

 

É normal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

há quantos registros no total ?

 

 

experimente usar JOIN (inner, right, left...)

ou dependendo do caso terá que remodelar as tabelas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remodelar as tabelas nessa altura do campeonato - sem chance.

 

  • 75 registros na tabela produtos
  • 496 registros na tabela imagens
  • 886 registros na tabela produto_filtro
  • 133 registros na tabela filtro

 

Bom, na verdade este select está suprindo bem seu papel. Eu consegui melhorar o desempenho da página já com essa consulta que fiz acima... antes era bem pior (dentro de cada desses 75 registros, eu fazia mais uma consulta apenas para trazer uma imagenzinha)!

Compartilhar este post


Link para o post
Compartilhar em outros sites

75 total, Query took 0.0057 sec

SELECT pro . * 
FROM sistema_produto pro
WHERE pro.proAtivo =  'S'
AND pro.proExcluido =  'N'
AND pro.proTipo =  'P'
ORDER BY pro.proNome ASC

 

7 total, Query took 1.5116 sec

SELECT img.imgUrl, pro.* 
FROM sistema_produto pro, sistema_imagem img 
WHERE pro.proAtivo = 'S' 
AND pro.proExcluido = 'N' 
AND pro.proTipo = 'P' 
AND pro.proId in (SELECT spf.proId FROM sistema_produto_filtro spf, sistema_filtro sf WHERE spf.filId = sf.filId GROUP BY spf.proId HAVING (group_concat('X',sf.catFiltroId,'-',sf.filId,'X') LIKE '%X8-36X%')) 
AND img.proId = pro.proId 
GROUP BY pro.proId 
ORDER BY pro.proNome ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o tempo de execução dessa sub-consulta?

 

SELECT spf.proId FROM sistema_produto_filtro spf, sistema_filtro sf WHERE spf.filId = sf.filId GROUP BY spf.proId HAVING (group_concat('X',sf.catFiltroId,'-',sf.filId,'X') LIKE '%X8-36X%')

 

Mostre também o resultado do seguinte comando:

 

EXPLAIN SELECT img.imgUrl, pro.* 
FROM sistema_produto pro, sistema_imagem img 
WHERE pro.proAtivo = 'S' 
AND pro.proExcluido = 'N' 
AND pro.proTipo = 'P' 
AND pro.proId in (SELECT spf.proId FROM sistema_produto_filtro spf, sistema_filtro sf WHERE spf.filId = sf.filId GROUP BY spf.proId HAVING (group_concat('X',sf.catFiltroId,'-',sf.filId,'X') LIKE '%X8-36X%')) 
AND img.proId = pro.proId 
GROUP BY pro.proId 
ORDER BY pro.proNome ASC

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.