首先对不起我的英语,这是我在这里的第一篇文章,我的英语不如我想的那样好,但我希望能够得到答案。
那么你们当中有些人现在可能会将自己的源代码放在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架构,我将非常感激:)
再次对不起我的语言,我现在低估了标准:)
答案 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等价物很有用。