Nukes 0 Denunciar post Postado Abril 11, 2012 Galera, estou quebrando a cabeça aqui. Peguei um projeto de uma loja virtual para fazer, mas estou me batendo nos atributos dos produtos. Por exemplo, uma calça jeans tem os atributos Tamanho e Cor. Então eu preciso de uma tabela (produtos) com os detalhes gerais do produto (como descrição, informações técnicas, etc...) que são os valores fixos independente dos atributos. E preciso de outra tabela (produtos_complemento) com os detalhes especificos de cada atributo, por exemplo, o preço pode variar dependendo da cor ou tamanho, o peso também, etc... Eu estou associando essas duas tabelas pelo IDProduto, e estou associando os items (SubProdutos) pelo CodProduto. Mas agora não estou sabendo fazer a ligação das coisas... Por exemplo, eu posso ter N atributos para um produto, como posso dispor essas informações? Com outra tabela? Como ficaria? Alguem me da uma luz! :S Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Abril 12, 2012 COMPLEMENTO PRODUTO SUBPRODUTO IdProduto >- IdProduto -< IdProduto IdComp IdSubProduto Propriedade Valor Unidade Algo assim? Como esta seu modelo? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 12, 2012 Vi uma discussão parecida aqui. Compartilhar este post Link para o post Compartilhar em outros sites
Nukes 0 Denunciar post Postado Abril 12, 2012 Galera, dei uma olhada, mas me corrijam se eu estiver errado... Aquele exemplo serve somente se você tiver uma quantidade de atributos fixa, certo? No meu caso, o usuário que vai cadastrar os atributos, então pode haver N atributos. Minhas tabelas estão da seguinte forma: Tabela Produtos idProduto | nomeProduto | descricaoProduto | infoTecnProduto | marca | vitrine Tabela produtos_complemento idLinha | idProduto | codProduto | valorVarejo | valorPromVarejo | valorAtacado | valorPromAtacado | Estoque | etc.. Tabela Atributos idAtributo | idTipoAtributo | nomeAtributo Tabela tipos_atributos idTipoAtributo | nomeTipoAtributo Tabela Produtos_atributos idLinha | idProduto | codProduto | idTipoAtributo | idAtributo Dessa forma eu consigo até listar um MENU SELECT para cada tipoAtributo do produto e cada atributo de cada tipo (sim isso ficou confuso). O problema está na hora que o cliente escolhe as opções. Por exemplo: Se ele escolhe uma calça jeans de cor azul e tamanho G. Dessa forma que está, eu posso achar o codigo do produto "Calca Jeans Azul" ou o código do produto "Calca Jeans Tamanho G" mas não os dois atributos ao mesmo tempo. Como posso fazer para que com um select eu consiga buscar o produto independente do tanto de atributos dele? Obrigado por quem teve paciencia de ler até aqui rsrs. Murilo Uma idéia que tive aqui, foi colocar campos na tabela produtos_atributos da seguinte forma: idLinha | idProduto | codProduto | idTipoAtributo1 | idAtributo1 | idTipoAtributo2 | idAtributo2 | idTipoAtributoN | idAtributoN Mas dessa forma eu teria uma quantidade de atributos fixa... =~~ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 12, 2012 Não sei se entendi mas Atributos pedidos select idAtributo from Atributos where nomeAtributo like 'Calca Jeans Azul%' or nomeAtributo like 'Calca Jeans Tamanho G%' Produtos com os atributos pedidos Select idProduto from Produtos_atributos where idTipoAtributo in (select idAtributo from Atributos where nomeAtributo like 'Calca Jeans Azul%' or nomeAtributo like 'Calca Jeans Tamanho G%') é isto ? Compartilhar este post Link para o post Compartilhar em outros sites
Nukes 0 Denunciar post Postado Abril 12, 2012 Então, é que assim: Dessa forma, eu consigo achar um produto com um ÚNICO atributo por exemplo: Quero achar a CALÇA JEANS (idProduto) de COR (idTipoAtributo) AZUL (idAtributo), eu procuro dessa forma: SELECT codProduto FROM produtos_atributos WHERE idProduto = x AND idTipoAtributo = y AND idAtributo = z; O problema está se eu quiser procurar por exemplo, a CALÇA JEANS (idProduto) de COR (idTipoAtributo) AZUL (idAtributo) e com TAMANHO (idTipoAtributo) G (idAtributo) e TIPO_ATRIBUTO_N (idTipoAtributo) e ATRIBUTO_N (idAtributo) Pois eu só tenho uma coluna "idTipoAtributo" e uma coluna "idAtributo". Como eu falei no post anterior, eu até poderia cadastrar mais colunas (idTipoAtributo1, idAtributo1, idTipoAtributoN, idAtributoN) mas dessa forma eu teria um valor fixo de atributos, o que não é o caso, pois o cliente poderá cadastrar N atributos para um produto. Se eu fizer um SELECT da forma que está, eu localizo ou a CALÇA JEANS DE COR AZUL (COD 11), ou a CALÇA JEANS DE TAMANHO G (COD 12) e nunca a CALÇA JEANS DE COR AZUL TAMANHO G (COD X) Entende o problema? =| Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Abril 13, 2012 Cara, pelo que li de tudo que foi apresentado até agora, você já tem a resposta. Sua dificuldade ainda é com o modelo ou com o select? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 13, 2012 Então, é que assim: ... Se eu fizer um SELECT da forma que está, eu localizo ou a CALÇA JEANS DE COR AZUL (COD 11), ou a CALÇA JEANS DE TAMANHO G (COD 12) e nunca a CALÇA JEANS DE COR AZUL TAMANHO G (COD X) ... Troque o OR pelo AND. Compartilhar este post Link para o post Compartilhar em outros sites
Nukes 0 Denunciar post Postado Abril 16, 2012 Troque o OR pelo AND. Então, mas é que assim, se eu fizer isso, mesmo assim não fará diferença nenhuma, por que aí vou ter dois códigos: Da calça jeans azul e da calça jeans tamanho 42 . Eu preciso que seja somente o código da Calça Jeans Azul Tamanho 42 - Cod 10 (exemplo)... Entende agora a questão? ... Da forma que está não vai funcionar :S Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 17, 2012 Eu preciso que seja somente o código da Calça Jeans Azul Tamanho 42 - Cod 10 (exemplo)... A dúvida é de SQL ou de montagem de Sistema ? Desculpe-me mas creio não ter entendido. Se é para buscar um código espécifico, exibe um grid de opções (por exemplo) e ao usuário escolher a opção passe o código para a query buscar apenas o Item solicitado. Ou se quer buscar várias opções tipo [JEANS AZUL 42] ? Compartilhar este post Link para o post Compartilhar em outros sites
Nukes 0 Denunciar post Postado Abril 17, 2012 Então Motta, obrigado pela paciencia antes de tudo rsrs.. Mas é que seguinte, veja bem... Existe o produto principal, por exemplo, a CAMISETA POLO. Dentro do produto principal tenho os ITENS referentes à esse produto, por exemplo, CAMISETA POLO COR LARANJA. O problema de como estou montando as tabelas é o seguinte: Minha tabela de ITENS_ATRIBUTOS está assim: idProduto | codItem | idTipoAtributo | idAtributo 10 1302 1 1 10 1303 1 2 10 1304 2 1 10 1305 2 2 Repare que nesse caso, tenho: - O idProduto (que é o pai, a CAMISETA POLO por exemplo) - O codItem (que é o nome do filho (por exemplo, CAMISETA POLO cor laranja) - O idTipoAtributo (que é o tipo do atributo, como COR ou TAMANHO) - O idAtributo (que é o atributo em si, por exemplo, LARANJA ou TAMANHO P) Se da forma como está, eu quiser procurar o produto CAMISETA POLO (idProduto 10) COR (idTipoAtributo 1) LARANJA (idAtributo 1) e TAMANHO (idTipoAtributo 2) P (idAtributo 1) eu vou ter o seguinte SELECT: SELECT * FROM itens_atributos WHERE codProduto = 10 AND (idTipoAtributo = 1 AND idAtributo = 1) OR (idTipoAtributo = 2 AND idAtributo = 1); Certo, dessa forma, vai me listar dois itens, ou seja, dois CodItem diferentes >_< Por isso eu falei, se eu quiser buscar somente o produto "CAMISETA POLO COR LARANJA" eu consigo. Se eu quiser buscar o produto "CAMISETA POLO TAMANHO P" eu também consigo. Mas se tiver mais de um atributo (CAMISETA POLO COR LARANJA E TAMANHO P) teria que ser um outro código, pois é um produto diferente. Espero que eu não esteja comendo bola, mas sabe quando a cabeça não funciona mais? rsrs abraços Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 17, 2012 Nestes casos a query é montada dinamicamente. As condições de AND e OR são tratadas Não me pergunte como se faz isto em php e mysql que não sei. Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Impacto 15 Denunciar post Postado Abril 21, 2012 Opa, boa noite. Já passei por situações semelhantes com e-commerce e resolvi assim. Preferi utilizar uma única tabela para isso por conta das variações também serem produtos e necessitarem de códigos distintos. Na tabela de produtos tenho o campo pai que indica que um produto vai ter variações, tenho o campo código para identificação do produto na loja, o campo variação que leva a descrição do que varia neste produto, ex: cor, tamanho, voltagem e o campo variação_de que leva o código do produto pai para fazer a ligação na hora de exibir o produto na loja. Na exibição da loja só mostro os produtos onde o campo pai é igual a 1 e os que variação_de são iguais a vazio e dentro da descrição do produto verifico se ele é um produto pai e dentro de um select seleciono os outros produtos onde variação_de são iguais ao código deste principal. Não sei se me entendeu bem, qualquer coisa poste ai Até mais Galera, estou quebrando a cabeça aqui. Peguei um projeto de uma loja virtual para fazer, mas estou me batendo nos atributos dos produtos. Por exemplo, uma calça jeans tem os atributos Tamanho e Cor. Então eu preciso de uma tabela (produtos) com os detalhes gerais do produto (como descrição, informações técnicas, etc...) que são os valores fixos independente dos atributos. E preciso de outra tabela (produtos_complemento) com os detalhes especificos de cada atributo, por exemplo, o preço pode variar dependendo da cor ou tamanho, o peso também, etc... Eu estou associando essas duas tabelas pelo IDProduto, e estou associando os items (SubProdutos) pelo CodProduto. Mas agora não estou sabendo fazer a ligação das coisas... Por exemplo, eu posso ter N atributos para um produto, como posso dispor essas informações? Com outra tabela? Como ficaria? Alguem me da uma luz! :S Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Abril 23, 2012 Bom, eu ja fiz isso algumas vezes , e costumo fazer da seguinte forma: /* Produtos */ id Nome Preco Estoque /* Atributos */ id_produto atributo valor na hora do select rola um group_concat junto com um concat ( Group_concat(concat(atributo,valor)) group by id_produto ) em conjuncao com um like Mas sinceramente... o maneira ,na minha opniao, correta, de se fazer isso eh com nosql - couchdb ou mongodb, da uma olhada, vale a pena. As estruturas ja sao proprias para que cada linha seja assimetrica as demais. Compartilhar este post Link para o post Compartilhar em outros sites