SQLの質問。

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

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

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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:2006/11/15 14:28:53
  • 終了:2006/11/22 14:30:03

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/11/15 14:40:46

ポイント35pt
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;

なのかな?

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

id:dingding

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

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

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

2006/11/15 16:20:08
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/11/15 23:30:29

ポイント35pt

回答#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"

id:dingding

ありがとうございます。

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

2006/11/16 12:52:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません