Paginador de problemas

La lista de problemas es cada vez más grande y un paginador es
necesario. Implemente un paginador sencillo y una mini barra de búsqueda 
(en realidad de momento solo acepta criterios de ordenación) para que sea
más fácil explorar la lista de problemas.

Hasta ahora la tabla de problemas se llenaba y se ordenaba usando
Javascript, fue necesario mover algunas cosas al servidor para lograr la
funcionalidad, por ejemplo, se modifico el servicio /problem/list para
que realice paginación y ordenación, ambas opcionales para que no afecte
la funcionalidad anterior.

De momento solo esta disponible en 'problemas' y no en 'mis problemas'
ya que ahí las cosas son un poco diferentes y supongo que las listas ahí
aun no son tan grandes.
Para la consulta hay 3 casos, usuario loggeado y que es administrador, loggeado
no administrador y el usuario anónimo, a continuación las posibles consultas.
¿Qué opinan?

Loggeado Admin:

	SELECT  100.0 / log2(GREATEST(accepted, 1) + 1) as rankPoints,
			1.0 * accepted / GREATEST(1, submissions) as ratio,
			Problems.*
			FROM Problems
			ORDER BY ? ASC | DESC;

Loggeado Normal:

	SELECT * FROM (
			(SELECT 100.0 / log2(GREATEST(accepted, 1) + 1) as rankPoints,
					1.0 * accepted / GREATEST(1, submissions) as ratio,
					Problems.*
					FROM Problems
					WHERE author_id = id)
			UNION
			(SELECT 100.0 / log2(GREATEST(accepted, 1) + 1) as rankPoints,
					1.0 * accepted / GREATEST(1, submissions) as ratio,
					Problems.*
					FROM Problems
					WHERE public = 1)
		) as T
		ORDER BY ? ASC | DESC;

Anónimo:

	SELECT	100.0 / log2(GREATEST(accepted, 1) + 1) as rankPoints,
			1.0 * accepted / GREATEST(1, submissions) as ratio,
			Problems.*
			FROM Problems
			WHERE public = 1
			ORDER BY ? ASC | DESC;