Ayuda de algoritmo de consulta PHP MYSQL

Estoy diseñando un sitio web que ordena resultados sobre sus votos y edades.

Encontré el algoritmo de reddit y creo que es el mejor para usar. Sin embargo, no sé cómo implementar esto en php. He buscado en google cómo hacerlo, pero no puedo encontrar ningún resultado. No sé si solo es malo porque no sé exactamente qué debería buscar.

Sé PHP básico sin embargo, hay una manera de hacer esto de una manera simple.

¿Es posible hacerlo así?

"SELECT * FROM table ORDER BY algorithm_here DESC";

El algoritmo de reddit es el siguiente:

 Log10(Z) + ((Y*Ts)/45000) = rank A = time posted B = 00:00:001 am 1/1/2010 U = Up votes D = Down votes Ts = AB X = UD Y = 1 if x>0 0 if x=0 -1 if x<0 z = max(abs(x),1) 

Bueno, si soy yo, escribiré un UDF en MySQL llamado puede ser reddit_algo o algo así y usarlo como

 SELECT *, reddit_algo() as rating FROM `table` ORDER BY `rating` LIMIT 30; 

Si desea la función almacenada, aquí está. Lo escribí rápido y no tuve tiempo de revisarlo completamente. Definitivamente espero que esto funcione. 🙂

 DELIMITER && DROP FUNCTION IF EXISTS reddit_rank && CREATE FUNCTION reddit_rank(time_posted TIMESTAMP, up_votes INT, down_votes INT) RETURNS NUMERIC(10,6) DETERMINISTIC BEGIN DECLARE start_time TIMESTAMP; DECLARE Ts INT; DECLARE vote_diff INT; DECLARE y TINYINT; DECLARE z1 INT; DECLARE z INT; DECLARE rank NUMERIC(10,6); SET start_time = "2010-01-01 00:00:01"; SET Ts = TIMESTAMPDIFF(SECOND,start_time, time_posted); SET vote_diff = up_votes - down_votes; IF vote_diff > 0 THEN SET y = 1; ELSEIF vote_diff < 0 THEN SET y = -1; ELSE SET y = 0; END IF; SET z1 = ABS(vote_diff); IF z1 >= 1 THEN SET z = z1; ELSE SET z = 1; END IF; SET rank = LOG10(z) + ( (y*Ts)/45000 ); RETURN(rank); END && DELIMITER ; SELECT *, reddit_rank(`time_added`, `up_votes`, `down_votes`) as rank FROM `table` ORDER BY rank; 

Espero que esto ayude. 🙂 … si tienes problemas con la forma de usar una función almacenada y todos intentan buscar en google.

Entonces otra vez Todavía quiero decirlo de nuevo, no es recomendable usar una función almacenada o algo similar si tienes una gran base de datos. Por lo tanto, recomiendo escribir un UDF. Si no sabes cómo hacerlo; entonces, por el momento, ajuste con esta función y cuando la carga aumente y empiece a generar muchos ingresos, haga que alguien escriba una función UDF para usted. 😉 ..