Ir para conteúdo

POWERED BY:

Arquivado

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

CA Braga

[Resolvido] Desafio: Relação entre tabelas + valores separados po

Recommended Posts

Desafio aos experts:

 

Temos 2 tabelas em questão, a tabela X e X2, como exemplo abaixo:

 

Tabela X: Contém os campos ID e Nome

 

Id: 1 | Nome: Nome1

Id: 2 | Nome: Nome2

Id: 3 | Nome: Nome3

Id: 4 | Nome: Nome4

 

Tabela X2: contém IDs da tabela X no mesmo campo, separados por vírgula:

 

Ids: 1,3

Ids: 4,3

Ids: 2,3

Ids: 4,2

 

Até aí tudo bem, mas o desafio é como mostrar os nomes relacionados aos IDs da tabela X separados por vírgula, pois na função INNER JOIN ou AND só conseguimos mostrar o primeiro valor, no caso antes da vírgula, como no exemplo abaixo

 

Ids: Nome1

Ids: Nome4

Ids: Nome2

Ids: Nome4

 

Nenhum desenvolvedor daqui conseguiu resolver, alguém poderia solucionar?

 

Desde já agradeço a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Tente a function INSTR , se ela retornar maior que zero indica que a substring existe na outra.

 

select instr('1,3','1') from ....

 

Retorna 1

 

2) Veja as Regras pois o título de seu tópico vai contra a 9ª

 

http://forum.imasters.com.br/index.php?app=core&module=help

 

3) Melhore este modelo separando as colunas dos id´s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, consegui não, nem os desenvolvedores daqui do escritório. Acho que compliquei demais a minha pergunta, vamos ver se consigo simplificar a coisa:

 

TABELA X: id | nome

TABELA X2: ids (grava os id's da tabela X. caso haja mais de uma opção selecionada na página, ele separa por vírgula)

 

Até aí está perfeito, ele mostra os valores separados por vírgula, como no exemplo abaixo:

 

TABELA X2: id, id, id, (ex.: 3,5,6)

 

Mas quero que ele mostre assim:

 

TABELA X2: nome, nome, nome (ex.: nome3,nome5,nome6)

 

 

Essa relação que não consigo fazer, pois INNER JOIN e AND só mostra o primeiro nome, não mostra os valores depois da vírgula.

 

 

Esse troço está de arrancar os cabelos do povo daqui, rss...

 

Obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

select b_id , group_concat(a_nome) nomes from
(
select a.id a_id , a.nome a_nome ,b.id b_id,  b.ids b_ids 
from a,b
where find_in_set(a.id , b.ids)
) z
group by b_id

 

 

Modelagem e normalizaçao Nota ZERO hein camarada....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peço desculpas pela postagem mal feita, mas é que não sou profissional da área mas preciso muito solucionar esse problema. Desde já agradeço a compreensão.

 

 

Não consegui solucionar, ficou assim:

 

 

dina_pdv_produtos_id, group_concat(dina_pdv_tamanho.tamanho) noms from
(
Select dina_pdv_tamanho.id dina_pdv_tamanho_id, dina_pdv_tamanho.tamanho dina_pdv_tamanho_tamanho, dina_pdv_produtos.id dina_pdv_produtos_id, dina_pdv_produtos.tamanho dina_pdv_produtos_tamanho 
from dina_pdv_produtos, dina_pdv_tamanho
where fin_in_set(dina_pdv_tamanho.id , dina_pdv_produtos.tamanho)
) z
group by  dina_pdv_produtos_id

 

 

partindo da estrutura entre duas tabelas, a X se chama dina_pdv_tamanho e a X2 se chama dina_pdv_produtos, sendo os campos:

 

dina_pdv.tamanho.id = id do tamanho

dina_pdv.tamanho.tamanho = nome do tamanho

dina_pdv_produtos.id = id do produto

dina_pdv_produtos.tamanhos = ids dos tamanhos separados por vírgula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho q você simplesmente escreveu a consulta errado (erro de digitacao).

 

select b_id produto, group_concat(a_tamanho) tamanhos from
(
Select b.id b_id , a.tamanho a_tamanho
from dina_pdv_produtos b , dina_pdv_tamanho a
where find_in_set(a.id , b.tamanhos)
) z
group by b_id

Compartilhar este post


Link para o post
Compartilhar em outros sites

GÊNIO, GÊNIO, GÊNIO!!!

 

EXCELENTE!!! MUUITO OBRIGADO!!!

 

Só estou com uma dúvida cruel, não consegui fazer com que o ID da tabela produtos seja pego pela variável URL (GET).

 

Tentei utilizar: AND dina_pdv_produtos.id = colname (variável URL), mas deu tudo errado, teria como me dar + uma mão???

 

MEU CARO, MUUUITO OBRIGADO!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

select b_id produto, group_concat(a_tamanho) tamanhos from
(
Select b.id b_id , a.tamanho a_tamanho
from dina_pdv_produtos b , dina_pdv_tamanho a
where find_in_set(a.id , b.tamanhos)
) z
where b_id = '$_GET[var_url]'
group by b_id 

 

 

algo assim provavelmente q você quer

Compartilhar este post


Link para o post
Compartilhar em outros sites

GOD BLESS YOU, MAN!!!

 

Caiu como uma luva, problema 100% resolvido.

 

MUITO OBRIGADO pela atenção e por ter me aturado.

 

E parabéns ao IMASTERS por proporcionar esta ferramenta!

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.