Как в CListView сохранить $index не изменным
- Ivan Ozercov
- Сообщения: 53
- Зарегистрирован: 2012.03.21, 15:53
- Откуда: Минск
Как в CListView сохранить $index не изменным
Мне надо, что бы значение $index не изменялось при сортировке. Выводится список пронумерованный , и мне надо , что бы сортировка осуществлялась например по имени но при этом $index оставался прежнем. Можно ли это сделать ?
Re: Как в CListView сохранить $index не изменным
нельзя.
Код: Выделить всё
//CListView
foreach($data as $i=>$item)
{
$data=$this->viewData;
$data['index']=$i;
$data['data']=$item;
$data['widget']=$this;
$owner->$render($this->itemView,$data);
if($j++ < $n-1)
echo $this->separator;
}
- Ivan Ozercov
- Сообщения: 53
- Зарегистрирован: 2012.03.21, 15:53
- Откуда: Минск
Re: Как в CListView сохранить $index не изменным
спасибо, но это не то. Поразмыслив пришел к тому что навереное надо получить порядковый номер строки в выборке (средствами Mysql), а потом его уже выводить как порядковый номер. Пока работает не много не так, как надо .
сейчас выполняю такой запрос
Вопрос как сделать так, что бы нумерция строк была после того, как произошла сортировка по RatingBYReview.
сейчас выполняю такой запрос
Код: Выделить всё
SELECT t.name,@n:=@n+1 AS rownum, IFNULL(SUM(r.mark)/COUNT(r.id),0) AS ratingByReview
FROM (select @n:=0) as num,`business`as `t`
LEFT JOIN review r ON r.business_id = t.id
WHERE t.subcategory_id="4"AND site_id="2"
GROUP BY t.id
ORDER BY ratingByReview DESC
LIMIT 8
- Вложения
-
- тут видно что нумерация произошла строк толкь не так как надо
- index.png (10.13 КБ) 1661 просмотр
- Ivan Ozercov
- Сообщения: 53
- Зарегистрирован: 2012.03.21, 15:53
- Откуда: Минск
Re: Как в CListView сохранить $index не изменным
Решил это пока с помощью костыля, во вьюшке
Буду очень признателен если, кто нибудь подскажет более изящное решение
Код: Выделить всё
$site_id=Site::current()->id;
$pos = Yii::app()->db->createCommand()
->select('pos.Position')
->from("(SELECT v.*, @n:=@n+1 AS Position
from(SELECT t.id,
(SELECT COUNT( v.id )
FROM vote AS v, contest AS c
WHERE v.business_id = t.id AND c.contest_id = ( SELECT MAX( contest_id ) FROM contest WHERE site_id = t.site_id ) AND v.time BETWEEN c.contest_start AND c.contest_end )AS voteRating
FROM `business`as `t`
WHERE t.subcategory_id= $subcategory->id AND site_id=$site_id
GROUP BY t.id
ORDER BY voteRating DESC) as v,(select @n:=0) as num) as pos")
->where('id=:id',array(':id'=>$data->id))
->queryRow();
echo '<div class="sequence">';
echo $pos['Position'];
echo '</div>';