2013-06-21 34 views
0

我正在編寫代碼,在給定視頻中的一些標籤後,返回其他具有類似標籤的視頻。它的工作原理,但我試圖隨機化結果..所以我搜索並發現ORDER BY RAND()將是相當緩慢。在mysql中過濾器之後隨機選擇

經過一段時間,我發現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

下面的方法選擇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分組,因此額外的排序不應該顯着影響性能。

+0

而如果選擇返回視頻的houndreds呢?仍然不會影響性能? – funky