luisym 0 Denunciar post Postado Setembro 6, 2011 Tenho a tabela em mysql produtos e caraterísticas Produtos tenho os produtos cadastrados Caraterísticas (característica, produto) relaciono as características com os produtos Preciso listar os 5 produtos com maior quantidade de características iguais. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 7, 2011 Seria melhor, creio, você detalhar este modelo. Compartilhar este post Link para o post Compartilhar em outros sites
luisym 0 Denunciar post Postado Setembro 8, 2011 Tenho as tabelas Produtos -idprod -nome ... produtos_caraterísticas (característica, produto) relaciono as características com os produtos - produto (recebe idprod) - caracteristica (recebe idcarac) caraterística Caracteristicas de produto - idcarac - nome ... Preciso listar os 5 produtos que tem maior quantidade de características similares ao produto atual Exemplo estou no produto idprod 1 Quero pegar os 5 produtos que tenham a maior quantidade de características iguais que o produto 1 Para poder recomendar produtos similares baseados nessas características. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 8, 2011 Uma ideia básica , creio que cabe melhora. Produtos -idprod -nome ... produtos_caraterísticas (característica, produto) relaciono as características com os produtos - produto (recebe idprod) - caracteristica (recebe idcarac) caraterística Caracteristicas de produto - idcarac - nome ... caraterística de 1 prod select c1.idcarac from produtos p1,produtos_caraterísticas pc1,caraterística c1 where p1.idprod = '1' and pc1.idprod = p1.idprod and c1.idcarac = pc1.idcarac busca parecidos select pc2.idprod , count(distinct pc2.idcarac) qtd from produtos_caraterísticas pc2 where pc2.idprod <> '1' and pc2.idcarac in (select c1.idcarac from produtos p1,produtos_caraterísticas pc1,caraterística c1 where p1.idprod = '1' and pc1.idprod = p1.idprod and c1.idcarac = pc1.idcarac) group by pc2.idprod order by 2 desc Compartilhar este post Link para o post Compartilhar em outros sites
luisym 0 Denunciar post Postado Setembro 9, 2011 beleza nesse raciocínio consegui bolar a recomendação por produtos similares, gostaria de colocar peso nas características pois uma característica é mais importante que outra. Tenho como criar uma variável no sql para que eu possa multiplicar pelo peso da característica e no final ordenar por este peso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 9, 2011 Cria uma coluna PESO na tabela caracteristicas ao invés de dar um count(distinct pc2.idcarac) faça um sum(peso) Compartilhar este post Link para o post Compartilhar em outros sites
luisym 0 Denunciar post Postado Setembro 10, 2011 Estou tentando agora colocar para mostrar produtos os 4 produtos mais comprados junto com um determinado produto To testando assim mas ele entra num loop e nao sai mais ja tentei de tudo mas não to visualizando o erro SELECT id_prod, count(id_prod) as qtd from pedido_carrinho where compra in (select DISTINCT compra from pedido_carrinho where id_prod = 721 and id > ((select MAX(id) from pedido_carrinho ) - 1000) ) and id > ((select MAX(id) from pedido_carrinho ) - 2000) and id_prod <> 721 ORDER BY qtd desc limit 0, 4 Onde estou errando? alias ta assim SELECT id_prod, count(id_prod) as qtd from pedido_carrinho where compra in (select DISTINCT compra from pedido_carrinho where id_prod = 721 and id > ((select MAX(id) from pedido_carrinho ) - 1000) ) and id_prod <> 721 ORDER BY qtd desc limit 0, 4 Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 11, 2011 SELECT id_prod, count(id_prod) as qtd from pedido_carrinho where compra in (select DISTINCT compra from pedido_carrinho where id_prod = 721 and id > ((select MAX(id) from pedido_carrinho ) - 1000) ) and id_prod <> 721 ORDER BY qtd desc limit 0, 4 Parece certo mas se pedido_carrinho.id_prod não for chave de íncide a query vai demorar mesmo. Eu criaria uma tabela com este produtos "comprados junto" e a alimentaria via uma procedure que rodaria batch num horário de ociosidade do Sistema. Tenho quae certeza que já vi um tópico semenhente a este aqui mas não o achei. Compartilhar este post Link para o post Compartilhar em outros sites
luisym 0 Denunciar post Postado Setembro 11, 2011 Nunca usei procedure, vou dar uma olhada me parece a melhor solução mesmo pois quero colocar essa consulta no carrinho de ficar lento o resultado vai ser pior. Se eu colocar i idprod como indice muda algo na minha estrutura atual pode deixar mais lento em outras consultas? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 11, 2011 Criar mais um índice onera a gravação (insert/update/delete). Mas se vai rodar em batch talvez o tempo não seja tão importante assim. -- Grosso modo : Criar uma tabela para produtos "também comprou" Organizar bem a hierarquia cliente>>comprou , não se iluda não é tão simples. Uma SP para carregar as tabelas, pode usar o EVENT para ficar automático, pense em automatizar ao máximo. Alterar a página para buscar estes produtos quando o cara por no carrinho. -- Compartilhar este post Link para o post Compartilhar em outros sites