获取与视频ID X相关的视频

时间:2014-02-16 13:18:55

标签: php mysql video related-content

我正在尝试选择与视频ID X相关的6个相关视频。我在这里看了几个关于SO的问题,但没有一个与我的系统匹配类型等。我试图做的是制作一个UNION SELECT但是一遍又一遍地列出同一个视频,所以我放弃了。

我有三个数据库,这些数据库现在已不再重要了。

视频 - 包含所有可用视频的表格。 vID vName vCover

流派 - 包含可用流派的表格(动作,戏剧,惊悚片等) gID gName

genre_connections - 此表包含流派和视频之间的连接(惊悚片 - >开始(但带有ID)) gcID gcVideoID gcGenreID

我想选择6个与提供的ID相关的视频。关系基于类似的类型。因此,如果我正在审查一部恐怖片/惊悚片,那么最相关的视频将是一部恐怖/惊悚片,而第二部最相关的影片将是一部恐怖的惊悚片。

基本上,这种关系应该基于具有相同类型的电影,这些类型按照总体类型排序,降序。

如果可以包含不会太麻烦,名称之间的关系也会很好。因此,如果我正在审核钢铁侠,则顶级相关视频将是钢铁侠2 钢铁侠3 ,然后与流派有关的电影将会跟随。

3 个答案:

答案 0 :(得分:1)

第一个查询是获取电影vID的{​​{1}}。如果您愿意,可以使用vID。

Ironman

修改

第二,你需要它的genreID:

SELECT `vID` FROM `videos` WHERE `vName` = 'Ironman';

我们将其别名为SELECT `gcGenreID` FROM `genre_connections` INNER JOIN `videos` ON `videos`.`vID` = `genre_connections`.`gcVideoID` WHERE `videos`.`vName` = 'Ironman'; ,并将其加入一个询问此类型视频的查询。

temp

如果您需要与此名称相关的电影,您可以使用:

SELECT `vID`,`vName`,`vCover`
FROM `videos`
INNER JOIN `genre_connections`
ON `videos`.`vID` = `genre_connections`.`gcVideoID`
INNER JOIN (SELECT `gcGenreID` FROM `genre_connections` INNER JOIN `videos` ON `videos`.`vID` = `genre_connections`.`gcVideoID` WHERE `videos`.`vName` = 'Ironman') `temp`
ON `temp`.`gcGenreID` = `genre_connections`.`gcGenreID`;

最后,您只需要将它们合并并添加限制:

SELECT `vID`,`vName`,`vCover`
FROM `videos`
WHERE `vName` LIKE '%Ironman%';

我已经测试过并正确运行。

答案 1 :(得分:1)

未经过测试(没有真正的测试数据),但问题的第一部分可能是通过以下单个查询完成的: -

SELECT d.vID, d.vName, GROUP_CONCAT(e.gName) AS SharedGenre, COUNT(*) AS SharedGenreCount
FROM videos a
INNER JOIN genre_connections b
ON a.vID = b.gcVideoID
INNER JOIN genre_connections c
ON b.gcGenreID = c.gcGenreID
AND b.gcVideoID != c.gcVideoID
INNER JOIN videos d
ON c.gcVideoID = d.vID
INNER JOIN genres e
ON c.gcGenreID = e.gID
WHERE a.vName = 'Iron Man'
GROUP BY d.vID, d.vName
ORDER BY SharedGenreCount DESC
LIMIT 6

对于第二部分,为了匹配相似的名字,我不确定它有多可用。例如,如果您搜索 Dexter ,您真的想要 Dexters Laboratory 返回吗?同样,在名称上的简单匹配中搜索 Aliens 将找不到 Alien

我建议你可能需要另一张表来连接一系列电影。

答案 2 :(得分:0)

在视频和流媒体之间创建SQL连接。这是你如何做到的 http://www.w3schools.com/sql/sql_join.asp

然后使用喜欢选择视频 http://www.w3schools.com/sql/sql_like.asp

您的查询将是这样的

SELECT * FROM Videos WHERE Title LIKE '%IronMan';