Opa Thiago,

Para quem conhece a funcionalidade VIEW de SQL a solução é muito simples.
Para quem não conhece, o conceito também á simples: São tabelas virtuais ou
temporárias que os dados são adquiridos de outras tabelas. As funções
principais de uma VIEW são segurança e otimização. Podemos utilizar para
segurança quando temos um banco de dados para sistemas paralelos e queremos
determinar quais são os campos das tabelas que um determinado usuário pode
acessar. Já otimização é no caso de querermos armazenar o resultado de uma
grande consulta ou uma stored procedure em uma tabela no banco... fazendo
com que o acesso ao resultado seja muito mais simples. Lembrando que o banco
de dados realiza as verificações de INSERÇÃO e ATUALIZAÇÃO de forma
transparente. Realmente é algo muito bom de se usar.

Bem, não sei se expliquei bem mas é mais ou menos isso que VIEW é, espero
contribuições de outros usuários caso tenha errado ou esquecido de alguma
coisa.

Voltando na explicação do meu problema, o sistema é uma variação de um
e-commerce, possui navegação por categoria, descrição do produto e listagem
de produtos entre outros. No listagem de produtos há um requisito de
ordenação por quantidade de vendas. As informações sobre o número de Vendas
está armazenado numa tabela separada, uma relação $hasMany de Produto ->
Venda. Na verdade, a tabela vendas armazena as transações realizadas, porem
com um simples COUNT() é possível saber quantas vendas foram realizadas.
Estou utilizando o Paginate do Cake 1.2 e quando fui desenvolver esse
requisito, fiquei na dúvida de como utilizar.

Em SQL isso é muito fácil: SELECT Produto.id, COUNT(Venda.*) AS num_vendas
FROM Produto LEFT JOIN Venda ON Produto.id = Venda.produto_id GROUP BY
Produto.id ORDER BY num_vendas DESC

Agora, como fazer isso no Cake que eu simplesmente não descobri. Tentei de
várias maneiras e pesquisei bastante. Só que não consegui uma solução
através do Cake. A solução foi muito mais simples que eu imaginava,
armazenei esta mesma SQL em uma VIEW e criei uma relação $hasOne do produto
com a tabela VIEW. Depois disso fica simples.


Um comentário:
Nunca trabalhei com uma plataforma de desenvolvimento completa como o Cake,
e geralmente, quando quero resolver um problema, penso na solução mais baixo
nível possível. Quando comecei a utilizar o Cake, venho me policiando para
sempre utilizar as funcionalidades do framework para não querer reinventar a
roda. Só que este policiamento tem seus lados ruins, nem sempre o framework
nos dará todas as soluções prontas, e nem é o objetivo dele, neste caso
fiquei horas, gastando tempo de dois funcionários para procurar uma solução
pronta que aparentemente não existe. E até pode existir, mas como ainda
penso em soluções baixo níveis, não consegui achar.

Mas fica a dica de que nem sempre temos que utilizar somente o que o
framework nos fornece. E para quem tiver algum sistema com comportamento
parecido, fica ai a solução.

Abraços


2008/1/30 Thiago Paes <[EMAIL PROTECTED]>:

> Parece ter sido uma ótima solução João, você poderia compartilhar com a
> galera com mais detalhes?
>
> Abs,
> Thiago
>
> --
>
> 2008/1/30 Joao Jose Pedrini <[EMAIL PROTECTED]>:
>
> Olá galera,
> >
> > Hoje passei um aperto danado para resolver um problema de ordenação com
> > o CakePHP 1.2. Eu tenho um campo $hasMany que necessita ter um
> > agrupamento para obter o resultado. O sistema necessita de uma ordenação de
> > acordo com o numero de vendas, no SQL faria normalmente com COUNT() e GROUP
> > BY, mas tive dificuldade. Depois de MUITAS horas, obtive somente uma
> > solução. (as vezes nós não pensamos direito pois ficamos com a ilusão de que
> > framework vai fazer tudo pra nós).
> >
> > Resolvi através de VIEW em SQL (Mysql 5.0), depois criei uma associação
> > $hasOne no model do Produto, e pronto... solução feita.
> >
> > Estou contando minha experiência pois não desejo essa perda de tempo
> > para ninguém... acredito que outros sistemas possam utilizar essa solução,
> > como sistemas de Votos, Rankings, etc.
> >
> > Aquele abraço!
> >
> > --
> > Joao Jose Pedrini
> > [EMAIL PROTECTED]
> > Consultor - COP-JR
> > http://blog.copjr.info/
> >
> >
>
>
> --
> ________________________________________________________
> Thiago Paes - www.thiagopaes.com.br - Linuxer: #224062
> >
>


-- 
Joao Jose Pedrini
[EMAIL PROTECTED]
Consultor - COP-JR
http://blog.copjr.info/

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito no Grupo "Cake PHP Português" 
em Grupos do Google.
 Para postar neste grupo, envie um e-mail para [email protected]
 Para cancelar a sua inscrição neste grupo, envie um e-mail para [EMAIL 
PROTECTED]
 Para ver mais opções, visite este grupo em 
http://groups.google.com/group/cake-php-pt?hl=pt-BR
-~----------~----~----~----~------~----~------~--~---

Responder a