人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLの質問。
YouTubeのビデオ再生後の「お勧めビデオ」のような仕組みをすることを検討しています。

そこで、ビデオ投稿者(v_user_id)と複数のタグがビデオに関連付けられている時に、そのビデオに「一番近い」を算出する計算方法として、以下のように考えました。

・ビデオ投稿者が同じなら2ポイント
・同じタグが含まれていたら1ポイント*タグの数

テーブルは、m_tag(タグのマスターテーブル)
t_tags(タグとビデオの関連付けをしているテーブル。一つのビデオ(v_id)に対して複数のレコード)

合計ポイント順に並べたいのですが、どうすればいいでしょうか?

また、ほかの考え方で「似ている」を実現できるならそれでも結構です。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:SQL YouTube お勧め スター タグ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント
SELECT v_id,
 (
 SELECT count(*) FROM video AS v2
 WHERE v1.user_id = v2.user_id AND v1.v_id <> v2.vid
 ) * 2
 +
 (
 SELECT count(*) FROM t_tags AS t1
 WHERE t1.t_id IN ( SELECT t2.t_id FROM t_tags AS t2 WHERE t2.v_id = v1.v_id )
 ) * 1
 AS rate
 FROM video AS v1
 ORDER BY rate DESC LIMIT 1;

なのかな?

試せる環境が無いので文法的に間違ってるかもしれません。

◎質問者からの返答

いつも大変詳しい解説ありがとうございます。

とてもとても助かっています。

すぐには試せないのですが、試してみたいと思います。


2 ● kurukuru-neko
●35ポイント

回答#1の回答の一部を変えてみました。

ためしてないので文法エラーがあるかもしれません。

# ビデオ投稿者が同じなら2ポイント

# (複数登録も1とみなす)

(

case when exists (

SELECT * FROM video AS v2

WHERE v2.v_user_id = v1.v_user_id

and v2.v_id <> v1.v_id

LIMIT 1

) then 2 else 0 end

)

# そのビデオを除く指定

from video as v1 where v_id<>"そのビデオID"

◎質問者からの返答

ありがとうございます。

こちらも是非ためしてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ