Ir para conteúdo

POWERED BY:

Arquivado

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

Nukes

Atributos de Produtos Loja Virtual

Recommended Posts

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

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

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

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

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

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

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

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
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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.