У меня есть запрос, который я хотел бы запустить как результат DBIC вместо строки запроса.Как преобразовать частичное выражение функций SQL в SQL :: Abstract?
Запрос заключается в следующем:
"SELECT posts.*, (((LOG10(SUM(points.point) + 1) * 287015) +
UNIX_TIMESTAMP(posts.create_time))) as total FROM posts left join points ON
post.post_id = points.post_id GROUP BY posts.post_id ORDER BY total DESC"
Поскольку я получил отношения установлены, я думаю, что я могу избежать левых присоединиться часть на запросе (мои отношения в схеме Post.pm файла имеют has_many отношения установить до точек стол, поэтому я предполагаю, что будет делать левое соединение с точками Vibe
То, что я сейчас следующее:.
$resultset->search(
{},
{
select => [({sum => points.point} + 1) * 287015],
as => [ 'total' ],
group_by [qw/ id /],
order_by => { -desc => 'total' },
}
);
Я имею проблему интеграции LOG 10 и суммы с добавлением 1 и умножением 287015.
Любая помощь приветствуется, я знаю, что все, что у меня там есть, не способ сделать это, но я что-то пробовал, Работа. Благодаря!
, что решить эту проблему для меня использовал * '+ выберите' => [кв.кв {(log10 (SUM (poins.point) + 1) * 287015) + UNIX_TIMESTAMP (me.create_time) AS total}], * – Grigor
также странно, что если в таблице нет точек, он возвращает total как undefined, это должно произойти? SUM может возвращать 0, а журнал 1 равен 0, 0 раз x равен 0, но UNIX_TIMESTAMP должен возвращать хорошее длинное целое число, чтобы сортировка была выполнена. Хммм. – Grigor
Обратите внимание, что при установке переменной окружения DBIC_TRACE = 1 вы увидите сгенерированные и выполненные SQL-запросы в STDOUT. –