【问题标题】:Cake PHP show videos ORDER BY ratingCake PHP 展示视频 ORDER BY rating
【发布时间】:2011-10-17 19:04:21
【问题描述】:

现在我开始熟悉 Cake PHP。

以下是问题: 我有两张桌子。这两个模型如下所示:

class Video extends AppModel {
var $ name = 'Video';
var $ hasMany = array ('Rating' =>
array ('className' => 'Rating',
'foreignKey' => 'model_id'
'Conditions' => array ('Rating.model' => 'Video');
'dependent' => true,
'exclusive' => true
)
);
}


class Rating extends Model {
var $ name = 'Rating';

var $ validate = array ('user_id' => array ('rule' => array ('MaxLength', 36),
'required' => true);
'model_id' => array ('rule' => array ('MaxLength', 36),
'required' => true);
'model' => array ('rule' => 'alphanumeric',
'required' => true));
}

看起来有效的查询是:

$ this-> paginate = array (
'Video' => array (
'limit' => 15,
'page' => 1,
'order' => array (
'Video.id' => 'DESC')
)
);
$ this-> set ('videos', $ this-> paginate ("Video"));

我想按评分排序

我的桌子:

CREATE TABLE `ratings` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `user_id` char(36) NOT NULL default '',
  `model_id` char(36) NOT NULL default '',
  `model` varchar(100) NOT NULL default '',
  `rating` tinyint(2) unsigned NOT NULL default '0',
  `name` varchar(100) default '',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `rating` (`model_id`,`model`,`rating`,`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

CREATE TABLE `videos` (
  `id` int(11) NOT NULL auto_increment,
  `link` varchar(200) NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;

提前感谢您的回答。

对不起我的英语

【问题讨论】:

    标签: php sorting pagination cakephp


    【解决方案1】:

    在我看来,您的视频表中应该有一个平均评分字段。这将提高性能并让您真正轻松地完成上述要求。

    用户添加新评分后。使用以下公式重新计算字段:

    new_avg_rating = (old_avg_rating + rating) / rating_count;
    

    类似地,如果用户删除评分:

    new_avg_rating = (old_avg_rating - rating / rating_count;
    

    “rating”是添加或删除的评分,rating_count 是该视频的“rating”表中的记录数。由于您是在向表中添加/删除新评级后执行此操作,因此它已经包含新评级。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2020-11-19
      相关资源
      最近更新 更多