code_junkie

Looking for advice on a “related videos” query on a tagged video system

Nov 13th, 2011
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. SELECT video_name FROM videos INNER JOIN videotags ON videos.id=videotags.video_id INNER JOIN tags ON tags.id=videotags.tag_id WHERE tag_name='x' AND videos.id<>'y' LIMIT 5
  2.  
  3. VIDEOS TABLE
  4. ------------
  5. video_id [PK,auto_increment] int(11)
  6. video_name varchar(255)
  7.  
  8. TAGS TABLE
  9. ----------
  10. tag_id [PK,auto_increment] int(11)
  11. tag_name varchar(255)
  12.  
  13. VIDEOTAGS TABLE
  14. ---------------
  15. tag_id [PK,FK] int(11)
  16. video_id [PK,FK] int(11)
  17.  
  18. VIDEOVIEWS TABLE
  19. ----------------
  20. video_id [FK] int(11)
  21. view_time datetime
  22.  
  23. VIDEORATINGS TABLE
  24. ------------------
  25. video_id [PK,FK] int(11)
  26. ip_address [PK] varchar(15)
  27. rating int(1)
  28. rate_time datetime
  29.  
  30. SELECT v2.video_id
  31. FROM VideoTags AS v1
  32. JOIN VideoTags AS v2
  33. USING (tag_id)
  34. WHERE v1.video_id = ?
  35. AND v1.video_id <> v2.video_id
  36. GROUP BY v2.video_id
  37. ORDER BY COUNT(*) DESC;
Add Comment
Please, Sign In to add comment