2013-07-05 3 views
1

У меня есть запрос, который я хотел бы запустить как результат 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.

Любая помощь приветствуется, я знаю, что все, что у меня там есть, не способ сделать это, но я что-то пробовал, Работа. Благодаря!

ответ

1

Непроверено, потому что вы не предоставили схемы и пример данных:

'+select' => [{ 
    \'(LOG10(SUM(points.point) + 1) * 287015) + UNIX_TIMESTAMP(me.create_time)' 
    -as => 'total' 
}], 
join => 'points', 
group_by => 'me.post_id', 
order_by => { -desc => 'total' }, 
+0

, что решить эту проблему для меня использовал * '+ выберите' => [кв.кв {(log10 (SUM (poins.point) + 1) * 287015) + UNIX_TIMESTAMP (me.create_time) AS total}], * – Grigor

+0

также странно, что если в таблице нет точек, он возвращает total как undefined, это должно произойти? SUM может возвращать 0, а журнал 1 равен 0, 0 раз x равен 0, но UNIX_TIMESTAMP должен возвращать хорошее длинное целое число, чтобы сортировка была выполнена. Хммм. – Grigor

+1

Обратите внимание, что при установке переменной окружения DBIC_TRACE = 1 вы увидите сгенерированные и выполненные SQL-запросы в STDOUT. –

 Смежные вопросы

  • Нет связанных вопросов^_^