2011-08-01 13 views
0

今私はケーキのPHPを知り始めた。ケーキのPHPのビデオを見るオーダー・バイ・レーティング

問題は次のとおりです。 私は2つのテーブルを持っています。 2つのモデルが次のようになります。

それが動作するクエリのように見える
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 ; 

お返事ありがとうございます。

私の英語のために申し訳ありません。

答えて

0

私の意見では、あなたのビデオテーブルに平均評価フィールドがあるはずです。これにより、パフォーマンスが向上し、上で求めていることを本当に簡単に行うことができます。

ユーザーが新しい評価を追加した後。ユーザが格付けを除去する場合と同様

new_avg_rating = (old_avg_rating + rating)/rating_count; 

:フィールドを再計算するために次の式を使用し

new_avg_rating = (old_avg_rating - rating/rating_count; 

「評価」追加または削除されて評価され、rating_countはレコードの数でありますその動画の「評価」表に表示されます。テーブルに新しい評価を追加/削除した後でこれを行うので、新しい評価がすでに含まれています。

関連する問題