رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مرتب کردن بر اساس تعداد رکورد های یک دسته
#1
سلام.
ببخشید استاد مرتب کردن بر اساس تعداد رکورد های یک دسته چجوریه؟
مثلا اون دسته ای که 30 رکورد داره اول باشه و به طور صودی مرتب بشن نه بر اساس ایدی و ...

<?php foreach(Categories::model()->findAll(array('order'=>'name','condition'=>'confirmed=1')) as $category) : ?>
<?php $count = Posts::model()->count('category_id=:categoryId AND confirmed=1', array(':categoryId'=>$category->id)); ?>
<li class="list-group-item-text"><a class="pull-right" href="<?php echo Yii::app()->createUrl('posts/category', array('id'=>$category->id)); ?>"><?php echo CHtml::encode($category->name); ?> </a><span class="label label-primary pull-left" style="margin: 14px 7px;"><?php echo $count; ?></span></li>
<div class="clear"></div>
<?php endforeach; ?>
پاسخ
تشکر شده توسط:
#2
فرض میکنم میخواین پستها رو بر اساس تعداد کامنتها مرتب کنید.
ابتدا این relation رو به مدل Posts اضافه کنید:
public function relations()
{
    return array(
        // ...
        'commentCount' => array(self::STAT, 'Comments', 'post_id'),
    );
}
حالا این متد رو هم به مدلتون اضافه کنید (من فرض کردم نزولی میخواین مرتب بشه. پس گفتم هرجا تعداد کامنتهای رکورد اول بیشتر از رکورد دوم بود توی مقایسه، 1- برگردونه تا جاشون عوض نشه) :
public function sortByComments($firstModel, $secondModel)
{
    if($firstModel->commentCount == $secondModel->commentCount) {
        return 0;
    }
    return ($firstModel->commentCount > $secondModel->commentCount ? -1 : 1);
}

حالا هرجا خواستین پستهاتون براساس تعداد کامنتها مرتب بشن، به این شکل کار میکنید:
if($posts = Posts::model()->with('commentCount')->findAll()) {
    usort($posts, array($posts[0], 'sortByComments'));
}
پاسخ
تشکر شده توسط: saeed




کاربران در حال بازدید این موضوع: 1 مهمان