Ir para conteúdo

POWERED BY:

Arquivado

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

KUROL3

[Resolvido] 2 tabelas sem dar 2 select

Recommended Posts

Olá tenho uma duvida

 

fiz um formulario de cadastro como nome "gravar" que é cadastrado os ids da tabela de "gravar_instrumentos" permtindo o usuario cadastrar mais de um instrumento por vez.

 

//tabela gravar

id, nome, id_instrumento, cidade, estado

 

//tabela gravar_instrumentos

id, nome

 

//registro na tabela de gravar

INSERT INTO gravar (id, nome, id_instrumento, cidade, estado) values (1, 'Marco', '1,5,8,6', 'Sorocaba', 'SP')

 

//issu funciona corretamente.. so que na hora de trazer os dados estou dando dois select pq.. o id_instrumento pode ser mais de um...

//havia tentado isso

 

$meu_comando = "SELECT gravar_instrumentos.nome as nome_instrumento, gravar.* FROM gravar LEFT JOIN gravar_instrumentos ON (gravar_instrumentos.id IN(gravar.id_instrumento))

 

//ai reparei que so pegava um registro tentei INNER e mesmo assim não deu.. então fiz 2 select...

//teria possibilidade de sair o resultado em um único select..?

//tipo concat(gravar_instrumentos.nome) as todos_instrumentos /* to viajando aqui em rsrsr */

abraço

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode trazer todos concatenados no MySQL sim. Segue um exemplo:

 

SELECT gravar.*,
       GROUP_CONCAT(gravar_instrumentos.nome) AS todos_instrumentos
  FROM gravar
  INNER JOIN gravar_instrumentos
    ON gravar_instrumentos.id = gravar.id_instrumento
  GROUP BY gravar.id_instrumento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eclesiastes fui testar o código e não funcionow....

 

vamos pensar pq...

//tabela gavar (dados)

INSERT INTO gravar (id, nome, id_instrumento, cidade, estado) values (1, 'Marco', '1,5,2,6', 'Sorocaba', 'SP')

INSERT INTO gravar (id, nome, id_instrumento, cidade, estado) values (2, 'Ricardo', '3,5', 'Ribeirao', 'SP')

INSERT INTO gravar (id, nome, id_instrumento, cidade, estado) values (2, 'Mateus', '1', 'Sao Paulo', 'SP')

 

 

//tabela gravar_instrumentos

INSERT INTO gravar_instrumentos (id, nome) values (1, 'Viola')

INSERT INTO gravar_instrumentos (id, nome) values (2, 'Violao')

INSERT INTO gravar_instrumentos (id, nome) values (3, 'Teclado')

INSERT INTO gravar_instrumentos (id, nome) values (4, 'Guitarra')

INSERT INTO gravar_instrumentos (id, nome) values (5, 'Sax')

INSERT INTO gravar_instrumentos (id, nome) values (6, 'Acordeon')

 

//tentei usar no lugar de gravar_instrumentos.id = gravar.id_instrumento => gravar_instrumentos.id IN gravar.id_instrumento

 

SELECT gravar.*,       
GROUP_CONCAT(gravar_instrumentos.nome) AS todos_instrumentos  
FROM gravar  
INNER JOIN gravar_instrumentos    ON gravar_instrumentos.id = gravar.id_instrumento  
GROUP BY gravar.id_instrumento

Aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh okay, não havia reparado que você grava os ids separados por vírgula. Neste caso, não se pode usar o IN (..) dessa forma, pois todo o valor do campo é tratado como um único valor. :P Você tem que usar FIND_IN_SET().

 

Exemplo:

 

SELECT gravar.*,
       GROUP_CONCAT(gravar_instrumentos.nome) AS todos_instrumentos
  FROM gravar
  INNER JOIN gravar_instrumentos
    ON FIND_IN_SET(gravar_instrumentos.id, gravar.id_instrumento)
  GROUP BY gravar.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maravilha agora... foi corretamente...

Obrigado, tu manja mesmo...

"Quanto mais aprendo mais descubro que menos sei"...

Abraço

KUROLE

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.