我正在编写代码,根据视频中的某些标签返回其他具有相似标签的视频。它有效,但我试图将结果随机化..所以我搜索并发现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个具有相似标签的随机视频时,我只会在尝试的所有内容中出现语法错误。
有关如何将它们组合在一起的任何建议吗?
答案 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进行分组,因此额外的排序不会对性能造成严重影响。