2012-01-04 2 views
0

Есть ли способ вернуть ранжирование заказов Mysql как часть результирующей записи?Mysql: return orderBy ranking

Например, предположим, что у меня есть комментарий таблица, где я запрашивая результаты ранжируются по:

comment_rating и comment_length, используя orderBy('r.comment_rating*r.comment_length').

Теперь я хочу, чтобы результирующие записи включали значение их соответствующих вычислений comment_rating*comment_length.

Возможно ли это?

Редакция:

Редактирование: также, имеет ли доктрина выполнение ранжирования дважды, если я это сделаю, а также использовать тот же алгоритм для orderBy?

ответ

2

ли вы имеете в виду что-то вроде:

SELECT *, (comment_rating * comment_length) AS ranking FROM comment ORDER BY ranking DESC 

Редактировать

Не использовали доктрину, но после того, как быстрый взгляд на documentation, я предполагаю, что это будет что-то вроде этого:

$q = Doctrine_Query::create() 
    ->select('*, (comment_rating * comment_length) AS ranking') 
    ->from('comment') 
    ->orderBy('ranking'); 
$comments = $q->execute(); 
+0

как я могу это сделать с помощью Doctrine? – whamsicore

+0

@whamsicore Не использовали Доктрину, но посмотрите мой обновленный ответ и дайте мне знать, если это сработает. –

+0

Отлично работает, спасибо! – whamsicore

0

Попробуйте это:

SELECT <yourFields>, (r.comment_rating * r.comment_length) AS Rating FROM ... 

Документация: Doctrine Query Language: Aggregate-values.

+0

Проводит ли доктрина ранжирования расчеты дважды, если я делаю это, а также использовать один и тот же алгоритм OrderBy? – whamsicore

0

Все, что вам нужно сделать, это включить

(comment_rating*comment_length) as comment_ranking 

в списке SELECT.

0
SELECT 
    comment_rating, 
    comment_length, 
    comment_rating*comment_length AS comment_rank 
FROM 
    tablename 
ORDER BY 
    comment_rank; 
1

Попробуйте это:

Select comment_rating, comment_length, 
     (comment_rating * comment_length) as rat_len 
From comment 
OrderBy rat_len