klawdyo 0 Denunciar post Postado Janeiro 2, 2010 Tenho um sistema de propaganda que gerencia banners de vários formatos e em diversas partes de um site. Recentemente adotei a ideia de permitir aos anunciantes que incluam pesos aos seus banners, dessa forma eles podem fazer com que suas propagandas tenham maiores probabilidades de aparecer nas páginas. Como eu fiz? select id, peso from banners me traz só o id e o peso. Agora eu uso as funçoes de manipulação de arrays para atribuir pesos aos valores desse array e uma função de randomização que me devolve um deles. Nesse caso, um banner de peso 10, tem 10 vezes mais chances de aparecer do que um banner de peso 1, pois eu de cara repito todos os valores a quantidade de vezes do peso. Ex. A consulta anterior me retorna --id--peso ..1......3 ..2......2 Após o tratamento, ela fica em um array assim. id 1 1 1 2 2 agora com uma função de randomização, eu escolho uma delas. O que eu queria é fazer isso diretamente pela consulta sql, ou diminuir ao máximo a intrusão do php nissso. Alguém tem alguma ideia? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 3, 2010 Faça, no ORDER BY, peso X a função de random, em geral elas retormam um real entre 0 e 1 , assim os maiores pesos terão maiores chances de ser maior, só não sei se será na proporção requerida. Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Janeiro 3, 2010 Interessante.. mas os que tem peso 1 quase nunca aparecerão. Quando fiz rand()/peso e mandei listar em ordem ascendente, os com peso 1 apareceram, poucas vezes, mas apareceram. Valeu. Se ninguém mais se pronunciar, já estou satisfeito com o resultado. Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Janeiro 3, 2010 Só pra constar: Sim, ele retorna nas proporções requeridas. Ao executar 10.000 vezes a consulta, a quantidade de vezes veio proporcional, ou seja, a linhas com peso 10 apareceram aproximadamento 10 vezes mais que as linhas com peso 1. VALEUU!!!!!!!! RESOLVIDO! Compartilhar este post Link para o post Compartilhar em outros sites