MySQL версия функции горячего Reddit Pgsql - PullRequest
2 голосов
/ 19 февраля 2012

Во-первых, извините за мой английский, это мой первый пост здесь, и мой английский не так хорош, как хотелось бы, но я надеюсь, что этого будет достаточно, чтобы получить ответ.

Итак, как некоторые из васвозможно теперь reddit поместил свой собственный исходный код на github , и я хочу использовать (немного измененную мной) версию схемы sql с алгоритмом hotness.Проблема в том, что схема написана на psgsql, а моя база данных использует движок mysql.

Я пытался преобразовать схему вручную, но у меня не осталось никаких эффектов, поэтому я попробую снова с разными инструментами и приложениями, но не с одним.из них поддерживается преобразование процедур и функций, и проблема в том, что мне нужен именно этот вариант.

Итак, кто-нибудь из вас может помочь мне преобразовать функцию hotness из туда :

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 ]

3 голосов
/ 16 августа 2013

Я только что написал эту функцию ниже, и она, кажется, работает.

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);

Я сравнил ее выходные данные с выходными данными этого кода Python , все выглядит нормально.

Пример прогона:

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 голос
/ 20 февраля 2012

Я не знаю синтаксиса MySQL для пользовательских функций, но некоторые специфические части PostgreSQL:

date_part('epoch', $3)

Количество секунд $3 с начала эпохи, т.е. с 1970-01-01 00: 00: 00.

1134028003

Количество секунд от эпохи до 2005-12-08 07: 46: 43.

Возможно, это полезно для поиска эквивалентов MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...