Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estive pesquisando uma solução para a seguinte situação e até agora não encontrei. Vou exemplificar para melhor entenderem:
INSERT INTO produto_tag (produto_id, tag) VALUES (1, 'tag1, tag2, tag3') (2, 'tag4, tag5, tag6') (3, 'tag7, tag8, tag9')
Isto resulta uma tabela com 3 registros:
===========+=================
PRODUTO_ID | TAG
===========+=================
1 | tag1, tag2, tag3
2 | tag4, tag5, tag6
3 | tag7, tag8, tag9
Agora, como faço um SELECT que me resulte no seguinte:
===========+==================
PRODUTO_ID | TAG_PERSONALIZADA
===========+==================
1 | tag1
1 | tag2
1 | tag3
2 | tag4
2 | tag5
2 | tag6
3 | tag7
3 | tag8
3 | tag9
* sabe-se apenas que PRODUTO_ID é tipo INT e TAG é tipo VARCHAR
Vai ser sempre "tag" alguma coisa? Porque se for uma string fixa você pode tentar uma função com um parâmetro pra separar o "array". Ainda assim é um pouco complicado, mas creio que dê de fazer. Contanto que esse "array" não tenha nomes variados.
Ou, você pode fazer uma tabela da maneira como colocou ali. O ID se repetindo com a descrição diferente. Seria uma chave composta. Se puder postar o contexto do que você precisa podemos pensar numa solução diferente.
--------------------------------
Olha, levando em consideração o que eu falei ali em cima eu fiz essa procedure:
-- O parâmetro tagx é apenas para contagem de tamanho. No seu caso, você pode passar qualquer string que tenha o mesmo
-- tamanho do que você quer buscar. Pode passar 'xxxx', 'yyyy', 'tagx', 'tag1', etc, pois não será usado pra comparação
CREATE PROCEDURE
ProdutoId(tagx varchar(255))BEGIN
Faça um teste assim:
CALL ProdutoId('tagx');
Fiz baseado nos dados que você passou e funcionou Ok aqui, qualquer dúvida ou modificação que precise ser feita posta aí, estou a disposição =]
ABrass.