Если вы хотите сохранить функцию, вот она.я только написал это быстро и не получил время, чтобы проверить это полностью.Я определенно надеюсь, что это работает.:)
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;
Надеюсь, это поможет.:) .. если у вас есть какие-либо вопросы о том, как использовать сохраненную функцию, и все попробуйте поиск в Google.
Тогда еще раз.Я все еще хочу сказать это снова, нецелесообразно использовать хранимую функцию или что-то подобное, если у вас большая база данных.Поэтому я настоятельно рекомендую написать UDF.Если вы не знаете, как это сделать;затем на время отрегулируйте с помощью этой функции, и когда нагрузка возрастет, и вы начнете получать большой доход, попросите кого-нибудь написать для вас функцию UDF.;) ..