reddit pgsql热度函数的mysql版本
首先为我的英语感到抱歉,这是我在这里的第一篇帖子,我的英语不如我所希望的那么好,但我希望这足以得到答案 所以你们中的一些人可能现在把他们自己的源代码放在reddit上,我想使用(我稍微修改一下)版本的sql模式和一个hotness算法。问题是模式是用psgsql编写的,我的数据库使用mysql引擎 我试图手动转换模式,但我放弃了,没有效果,所以我再次尝试使用misc工具和应用程序,但它们中甚至没有一个支持过程和函数的转换,问题是我只需要这一个选项 你们有谁能帮我把热度函数转换成: 对于mysql模式,我将非常感激:)reddit pgsql热度函数的mysql版本,mysql,schema,Mysql,Schema,首先为我的英语感到抱歉,这是我在这里的第一篇帖子,我的英语不如我所希望的那么好,但我希望这足以得到答案 所以你们中的一些人可能现在把他们自己的源代码放在reddit上,我想使用(我稍微修改一下)版本的sql模式和一个hotness算法。问题是模式是用psgsql编写的,我的数据库使用mysql引擎 我试图手动转换模式,但我放弃了,没有效果,所以我再次尝试使用misc工具和应用程序,但它们中甚至没有一个支持过程和函数的转换,问题是我只需要这一个选项 你们有谁能帮我把热度函数转换成: 对于mysql
再一次为我的语言感到抱歉,我现在低估了标准:)我不知道用户定义函数的MySQL语法,但一些特定于PostgreSQL的部分是:
date_part('epoch', $3)
自新纪元(即自1970-01-01 00:00:00)以来,$3
的秒数
1134028003
从历元到2005-12-08 07:46:43的秒数
也许这对查找MySQL等价物很有用。我刚刚在下面编写了这个函数,它似乎可以工作
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);
我将它的输出与的输出进行比较,似乎一切都正常
样本运行:
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)
但是为什么呢?是因为Reddit在那个日期开始运行吗?@AlbertKam:不知道Reddit为什么选择这个值。但对于重新实现算法来说,这也是不需要知道的。
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)