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