在mysql中过滤后随机选择

时间:2013-06-21 03:12:54

标签: mysql join random tags

我正在编写代码,根据视频中的某些标签返回其他具有相似标签的视频。它有效,但我试图将结果随机化..所以我搜索并发现ORDER BY RAND()会很慢。

过了一段时间,我发现了this article - 所以我试着将它调整为我的代码;这是我尝试返回一个随机视频:

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个具有相似标签的随机视频时,我只会在尝试的所有内容中出现语法错误。

有关如何将它们组合在一起的任何建议吗?

1 个答案:

答案 0 :(得分: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进行分组,因此额外的排序不会对性能造成严重影响。