[Site] ランキング (仕様)

タグ :

作成サイト「koweboo」についてまとめるシリーズです。
今回はランキングについてまとめます。

作成サイト内の関連箇所 — 「ランキング

ランキングの仕様

ユーザーの投稿意欲をかき立てるには、ランキング順位として発表するのが効果的らしいです。
ランキングはわざわざ手動で計算なんかしなくても、PHP 処理で自動に決定するものとします。
ランキングの種類としては以下になります。

  • お題ランキング
  • 音声ランキング
  • お題職人ランキング

「お題職人ランキング」は、お題を投稿したユーザーのランキングです。
それぞれのランキング算出の計算式は異なります。

お題ランキング

お題ランキング順位は以下の情報を元に計算で決定します。
括弧()内はランキング反映度になります。

  • お題に対する音声のアップロード数(高)
  • お題に対する音声の再生回数(中)
  • お題に対する音声の評価数(低)

計算式は以下になります。

(アップロード数 × 3) + (再生回数 × 2) + (評価数 × 1)

音声ランキング

音声ランキング順位は以下の情報を元に計算で決定します。
括弧()内はランキング反映度になります。

  • 音声の評価数(高)
  • 音声の再生回数(中)

計算式は以下になります。

(評価数 × 3) + (再生回数 × 2)

お題職人ランキング

お題職人ランキング順位は以下の情報を元に計算で決定します。
括弧()内はランキング反映度になります。

  • お題に対する音声のアップロード数(高)
  • お題の投稿数(中)
  • お題に対する音声の再生回数(低)

計算式は以下になります。

(アップロード数 × 3) + (投稿数 × 2) + (再生回数 × 1)

テーブル作成

ランキングのテーブルは特別には用意しません。
必要となるテーブルは以下になります。

  • お題に対する音声のアップロード数カウントテーブル
  • 音声の再生回数カウントテーブル
  • 音声の評価数カウントテーブル
  • ユーザーが投稿したお題数カウントテーブル
[count_requests]
フィールド名 名称 説明
id アップロードカウントID 主キー
request_id お題ID カウントするお題のID
count カウント お題のカウント値
[count_voices]
フィールド名 名称 説明
id 再生回数ID 主キー
voice_id 音声ID カウントする音声のID
count カウント 音声の再生回数値
[voices_goods]
フィールド名 名称 説明
id 音声評価カウントID 主キー
user_id ユーザーID 評価したユーザーのID
voice_id 音声ID 評価する音声のID
good 評価数 音声の評価数
[count_user_requests]
フィールド名 名称 説明
id お題投稿カウントID 主キー
user_id ユーザーID お題投稿したユーザーのID
count カウント お題の投稿数

上記がカウント用テーブルになります。

アソシエーション設定

上記テーブルは4つともモデルのみを Bake します。
Bake で生成されたモデルのファイルは特に変更はいりません。
また、お題テーブル、音声テーブルへのアソシエーションも追記しておきます。

[Request.php]
public $hasMany = array(
	'CountRequest' => array(
		'className' => 'CountRequest',
		'foreignKey' => 'request_id',
		'dependent' => false,
		'conditions' => '',
		'fields' => '',
		'order' => '',
		'limit' => '',
		'offset' => '',
		'exclusive' => '',
		'finderQuery' => '',
		'counterQuery' => ''
	)
);
[Voice.php]
public $hasMany = array(
	'VoicesGood' => array(
		'className' => 'VoicesGood',
		'foreignKey' => 'voice_id',
		'dependent' => false,
		'conditions' => '',
		'fields' => '',
		'order' => '',
		'limit' => '',
		'offset' => '',
		'exclusive' => '',
		'finderQuery' => '',
		'counterQuery' => ''
	),
	'CountVoice' => array(
		'className' => 'CountVoice',
		'foreignKey' => 'voice_id',
		'dependent' => false,
		'conditions' => '',
		'fields' => '',
		'order' => '',
		'limit' => '',
		'offset' => '',
		'exclusive' => '',
		'finderQuery' => '',
		'counterQuery' => ''
	)
);

これで準備は整いました。
処理については次回から。。。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed