
Quem trabalha com Wordpress de forma profissional com certeza deve conhecer um plugin chamado WP-DownloadManager, do Lester Chan, um dos mais atuantes desenvolvedores de plugins para Wordpress, veja alguns.
Pois bem, o Wp-DownloadManager é uma mão na roda para disponibilizar arquivos para download, permite criar categorias, ordenar a disponibilização dos arquivos e ainda faz estatísticas de download.
Tenho usado ele na intranet de um dos meus empregadores, com sucesso. Mas vamos aos problemas que precisei solucionar.
1. Temos diversas categorias de downloads, e acertamos que a ordem que mostraríamos os arquivos aos usuários era os mais novos primeiros, ordenados pelo file_id dos arquivos, veja abaixo a tabela do plugin.
CREATE TABLE `wp_downloads` ( `file_id` int(10) NOT NULL auto_increment, `file` tinytext NOT NULL, `file_name` text NOT NULL, `file_des` text NOT NULL, `file_size` varchar(20) NOT NULL default '', `file_category` int(2) NOT NULL default '0', `file_date` varchar(20) NOT NULL default '', `file_updated_date` varchar(20) NOT NULL default '', `file_last_downloaded_date` varchar(20) NOT NULL default '', `file_hits` int(10) NOT NULL default '0', `file_permission` tinyint(2) NOT NULL default '0', PRIMARY KEY (`file_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Tudo estava funcionando maravilhas, os usuários fazem o upload dos arquivos, levando em consideração que os mais antigos devem ser inseridos primeiro, e ai será exibido como planejamos, ficando assim:
277/2009 – Designa Comissão Especial …..
» 42.5 KiB – 5 downloads – 02 de novembro de 2009
276/2009 – Designa Comissão Especial encarregada de elaborar …..
» 41.0 KiB – 3 downloads – 05 de novembro de 2009
275/2009 – Designa o servidor ….l
» 43.0 KiB – 2 downloads – 10 de novembro de 2009
O problema é que como a intranet atual foi migrada de uma versão anterior, onde não existia um CMS, vários arquivos foram inseridos a esmo, e que ao serem exibidos não correspondem a lista descrescente por nome, como no exemplo acima.
Embora que sistema permita mudar isso facilmente, isso não era possível de se fazer, pois iria afetar todas as outras categorias, pois as mudanças de ordenação são globais.
Vejamos a solução:
Primeiro foi dado um Select na tabela WP_DOWNLOADS para retonar o último FILE_ID.
SELECT max(file_id) FROM wp_downloads
retornou: 969
Com o uso de um contador, é possível simular uma contagem sequencial, veja:
set @contador:=970; SELECT (@contador:=@contador+1), wp_downloads.* FROM `wp_downloads` WHERE `file_category`= 10 order by `file_name` asc
Ou seja, a idéia é fazer com que os valores desse SELECT sequencial possa ser aplicado na coluna file_id da tabela wp_downloads.
Com a ajuda de meu amigo Edcley Firmino – o papa do SQL -, chegamos a decisão de fazer uma Procedure utilizando RowID. Veja como ficou:
BEGIN DECLARE vcontador INT; declare b,vfile_id int; DECLARE cursor_1 CURSOR FOR SELECT file_id FROM wp_downloads WHERE file_category= 10 order by file_name ASC; DECLARE EXIT HANDLER FOR NOT FOUND SET b=1; OPEN cursor_1; set vcontador := 970; REPEAT FETCH cursor_1 INTO vfile_id; update wp_downloads set file_id = vcontador where file_id = vfile_id; set vcontador := vcontador + 1; UNTIL b=1 END REPEAT; CLOSE cursor_1; END
Pronto, ao executar-mos essa procedure, todos os registros da coluna File_ID foram atualizados, e então foi possível voltar a exibir corretamente os arquivos em ordem decrescente.
Funciona maravilhosamente bem… é isso.
Veja também...
- Curiosidades sobre campo TIMESTAMP em MySQL
- Retornar registros que não coincidem entre as tabelas
- Web 2.0 Ilustrada
- Resultado de dois bancos distintos em apenas um SQL
- Howto: como apagar registros duplicados no MySQL
Related posts brought to you by Yet Another Related Posts Plugin.


Fenomenal,
não conhecia e é excelente….
Obrigado mais uma vez