0

ビデオからいくつかのタグを指定すると、同様のタグを持つ他のビデオを返すコードを書いています。それは機能しますが、結果をランダム化しようとしています..なので、検索してORDER BY RAND()かなり遅くなることがわかりました。

しばらくして、この記事を見つけたので、自分のコードに合わせてみました。ランダムなビデオを返す私の試みは次のとおりです。

SELECT r1.id, name, site, siteid
FROM   video AS r1 JOIN (
         SELECT (RAND() * (SELECT MAX(id) FROM video)) AS id
       ) AS r2
WHERE  r1.id >= r2.id
LIMIT  4

そして、これが同様のタグを持つビデオを見つけるための私のコードです:

SELECT   v.name, v.site, v.siteid, v.id
FROM     video v
    JOIN video_tag vt ON vt.id_video = v.id
WHERE    vt.id_tag IN ('1','2')
GROUP BY v.id
HAVING   COUNT(DISTINCT vt.id_tag) = 2

ただし、それらをまとめて、同様のタグを持つ 4 つのランダムなビデオを取得しようとすると、すべての試行で構文エラーが発生します。

それらをまとめる方法に関する提案はありますか?

4

1 に答える 1

0

次のメソッドは、同じタグを持つ動画を特定した後、 4 つを選択します。

SELECT v.name, v.site, v.siteid, v.id
FROM video v JOIN
     video_tag vt
     ON vt.id_video = v.id
WHERE vt.id_tag IN ('1','2')
GROUP BY v.id
HAVING COUNT(DISTINCT vt.id_tag) = 2
order by rand()
limit 4;

既に動画 ID でグループ化しているため、追加の並べ替えによってパフォーマンスが大幅に影響を受けることはありません。

于 2013-06-21T03:23:28.660 に答える