mysql版本的reddit pgsql hotness函数

时间:2012-02-19 19:57:17

标签: mysql schema

首先对不起我的英语,这是我在这里的第一篇文章,我的英语不如我想的那样好,但我希望能够得到答案。

那么你们当中有些人现在可能会将自己的源代码放在github上,而我想用热门算法来使用(稍微修改一下)sql schema的版本。问题是模式是用psgsql编写的,而我的数据库是用mysql引擎。

我尝试手动转换架构,但我放弃了没有效果,所以我再次尝试使用misc工具和应用程序,但是甚至其中一个都不支持转换程序&功能,问题是我只需要一个选项。

所以,你们中的任何人都可以帮我转换there的热度函数:

create or replace function hot(ups integer, downs integer, date timestamp with time zone) returns numeric as $$
    select round(cast(log(greatest(abs($1 - $2), 1)) + sign($1 - $2) * (date_part('epoch', $3) - 1134028003) / 45000.0 as numeric), 7)
$$ language sql immutable;

到mysql架构,我将非常感激:)

再次对不起我的语言,我现在低估了标准:)

2 个答案:

答案 0 :(得分:3)

我刚刚在下面写了这个函数,它似乎有效。

CREATE FUNCTION hot (ups INT(10),downs INT(10),d TIMESTAMP)
RETURNS DOUBLE DETERMINISTIC
RETURN ROUND(LOG(GREATEST(ABS(ups-downs), 1)) + SIGN(ups-downs)*(UNIX_TIMESTAMP(d) - 1134028003) / 45000.0,7);

我将其输出与this Python code的输出进行了比较,一切似乎都没问题。

示例运行:

SELECT hot(20,10,'2013-01-01 00:00:00');

Query OK, 0 rows affected (0.00 sec)

+----------------------------------+
| hot(20,10,'2013-01-01 00:00:00') |
+----------------------------------+
|                     4957.1202962 |
+----------------------------------+
1 row in set (0.00 sec)

答案 1 :(得分:1)

我不知道用户定义函数的MySQL语法,但一些PostgreSQL特定部分是:

date_part('epoch', $3)

自纪元以来$3的秒数,即自1970-01-01 00:00:00以来。

1134028003

从纪元到2005-12-08 07:46:43的秒数。

也许这对于找到MySQL等价物很有用。