【问题标题】:mysql version of reddit pgsql hotness functionmysql版reddit pgsql热度函数
【发布时间】:2018-12-13 05:06:00
【问题描述】:

首先对不起我的英语,这是我在这里的第一篇文章,我的英语不是我希望的那么好,但我希望它足以得到答案。

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

我尝试手动转换架构,但没有任何效果就放弃了,所以我再次尝试使用其他工具和应用程序,但其中甚至没有一个支持转换过程和函数,问题是我正好需要那个一种选择。

那么,有没有人可以帮我转换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 架构,我将不胜感激 :)

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

【问题讨论】:

    标签: mysql schema


    【解决方案1】:

    我刚刚在下面写了这个函数,它似乎可以工作。

    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)
    

    【讨论】:

      【解决方案2】:

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

      date_part('epoch', $3)
      

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

      1134028003
      

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

      也许这对于查找 MySQL 等效项很有用。

      【讨论】:

      • 但是为什么是 2005-12-08 08:46:43 呢?是因为 Reddit 在那一天开始运行吗?
      • @AlbertKam:Reddit 为什么选择这个值尚不清楚。但是对于重新实现算法,这也没有必要知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2017-01-10
      • 2012-08-05
      相关资源
      最近更新 更多