Senhores,
Estou com uma duvida técnica/concentual: preciso fazer um mecanismo de ordenação de entidades.
Imaginem que são Selos em uma Coleção. Tenho a tabela Colecao e a tabela Selo e um Selo esta em uma Colecao.
A ordem que estas fotos aparecem na Coleção pode ser alterada arbitrariamente, na tela o caboclo pode arrastar e soltar as fotos.
Pensei em implementar uma lista encadeada (cada selo sabe qual é o id do proximo) pois assim apenas alguns selos seriam afetados, ao arrastar um eu teria que desfazer apenas 2 nós ao inves de update em 9 ou 25 ou TODOS os selos por exemplo (e na exclusão recriar um nó). Guardar a ordem em um atributo da tabela de coleção me parece ruim.
Como eu vou fazer isso via PHP acessando Mysql eu pergunto:
- Eu poderia ordenar pelo SQL usando algo macabro e específico do mysql para retornar os elementos conectados entre si.
- Montar essa lista encadeada em memória, via PHP, seria ruim ou menos performático? Sem falar que eu teria que trazer sempre todos, mesmo em caso de paginação, ugh.
- SQL recursivo ou algo mais complexo?
- Poderia abandonar essa ideia e tratar a ordem como um numero e ordenar por ele, mas ai ao alterar uma posição eu teria que alterar todos os envolvidos, sera que vale a pena (penso em seguir por essa ideia)?
- Poderia criar uma XREF maluca e uma maçaroca de SQL que traz tudo ordenado por acaso, uma vez que não faz sentido (via programação por BRUTEFORCE).
Então: sugestões, ofensas, comentários?