OrderBy melhorado

0 views
Skip to first unread message

( David . RJ . 2K )

unread,
Oct 10, 2009, 8:12:22 PM10/10/09
to SQLReactor Brasil
Mais uma das minhas idéias malucas, mas essa é simples, talvez:

O orderBy, até onde sei, é limitado somente a um item, então talvez
isso possa resolver:

// TIPO EXTREMO-SIMPLES
// MODELOS
'orderBy' => 'id'; // ID ASC
'orderBy' => 'id, !user'; // ID ASC, USER DESC
// EXEMPLO ADICIONAL
'orderBy' => '!id, !user'; // ID DESC, USER DESC
'orderBy' => 'id, user, !time'; // ID ASC, USER ASC, TIME DESC
// NOTAS
No caso, o ! fará DESC, enquanto não usá-lo fará ASC, no modelo
"{$inverso?}$coluna[, ...]"

// TIPO SIMPLES (OU EXPLÍCITO)
// MODELOS
'orderBy' => 'id desc'; // ID DESC
'orderBy' => 'id desc, user asc'; // ID DESC, USER ASC
// NOTAS
Neste caso, apenas demonstra-se mais o que deverá ser feito, no modelo
"$coluna{$espaço}$direcao[, ...]"

// TIPO COMPLEXO
// MODELOS
'orderBy' => array('id' => 'desc'); // ID DESC
'orderBy' => array('id' => 'asc', 'user' => 'desc') // ID ASC, USER
DESC
// NOTAS
Neste último caso, é utilizado um Array, creio que a velocidade de
processamento seja superior, mas não creio que será "mortalmente" mais
rápido que a forma linear. O modelo seria: array($coluna => $direcao
[, ...])

Eu prefiro o primeiro ou o segundo modelo, mas ainda prefiro o
primeiro, pois além de ser bem leve é simples de entender, o segundo
só vai fazer o usuário escrever o SQL.
Mas, vamos o que vocês dizem? Vale apena mudar?

Então poderíamos "matar" o direction.

Ahh, falando em alterações, alguém poderia me dizer a TODO list?
Gostaria de ficar por dentro das possíveis alterações e talvez
participar de algumas delas.
Pode mandar pro meu email se achar melhor.

Valeu!

Rafael Martins

unread,
Oct 11, 2009, 1:27:57 PM10/11/09
to sqlreact...@googlegroups.com
Também pensei no order múltiplo. Mas ainda nao tinha implementado acho que fica melhor com array.

Outra coisa importante eh permitir navegação pelos relacionamentos, como nos filtros. Assim vc pode ordenar pelo atributo de um objeto ligado ao objeto que está sendo buscado.

Ex: Vendedor -> Loja.
Se a classe Vendedor tiver um relacionameno pra Loja, podemos querer uma lista de vendedores ordenada pelo nome das lojas, depois dos vendedores em si. Ficaria algo assim:

'orderBy' => array( 'loja->nome', 'nome' );

ou:

'orderBy' => array( aray( 'loja->nome', 'desc' ), 'nome' );

Por padrão a ordenação eh asc e vc precisa passar só o atributo. Se quiser fazer desc, passa um array com a direção (ja que desc eh bem mais raro).

Pra isso o lugar onde montamos o orderBy precisaria implementar a mesma lógica de tradução de relacionamentos utilizada nos filtros. Não eh nada mto complicado. Eu só nao parei pra fazer ainda. Talvez de até pra copiar o código dos filtros.

O que acham?

[]s,.
Snit


2009/10/10 ( David . RJ . 2K ) <davi...@gmail.com>

Silas Ribas Martins

unread,
Oct 13, 2009, 3:28:31 PM10/13/09
to sqlreact...@googlegroups.com
Salve,

É está precisando mesmo da ordenação multipla, voto pela ordenação via vetor, fica mais claro. Usar essa ordenação via atributo ficará show de bola.

2009/10/11 Rafael Martins <snit...@gmail.com>



--
Atenciosamente (=Ô.Ô=),
Silas Ribas {Maximus_BR}

71 8892-6095 ( Celular ) silasrm[arroba]gmail.com ( e-mail )
sil...@hotmail.com ( msn ) silasrm ( skype )

Twitter: @silasribas
Blog:silas.theducks.com.br
Site: www.silasribas.com.br
LinkedIn: http://www.linkedin.com/in/silasrm
Facebook: http://www.facebook.com/silasribas
Orkut: http://www.orkut.com.br/Main#Profile.aspx?rl=ls&uid=3392300346524829647
Salvador/BA
Linux Distro - *Ubuntu
Linux User Registered: 383742

"Triste época em que vivemos, onde é mais fácil desintegrar um átomo do que quebrar um preconceito" [Albert Einstein]

André Farzat

unread,
Oct 13, 2009, 8:01:56 PM10/13/09
to sqlreact...@googlegroups.com
Sim, precisa sim.
mas eu voto pela ideia de ser stringão mesmo

'orderBy' => array( 'loja->nome', 'nome' );

seguindo essa regra com as setas e pode usar o exclamação para ser DESC.
Gostei dessa ideia e voto por ela.

abraços.

2009/10/13 Silas Ribas Martins <sil...@gmail.com>



--
André de Almeida Farzat
andre...@gmail.com
Reply all
Reply to author
Forward
0 new messages