搜索具有最多共同标签的结果

时间:2011-08-22 18:38:42

标签: php mysql

我正在尝试执行sql查询或一组查询,这些查询将允许我查找具有相同标记的其他视频,并按大多数匹配对其进行排序。我使用PHP作为服务器端代码和mysql作为我的数据库。为此我使用了2个表。

视频

  Column    Type           Null 
     timestamp  int(11)     No       
     vid_id     varchar(32) No       
     file_name  varchar(32) No       
     uploader   varchar(55) No       
     title      varchar(30) No       
     duration   varchar(7)  No       

    Keyname Type     Unique Packed  Column  Cardinality Collation
    vid_id  BTREE    Yes    No      vid_id         94       A       
    title   FULLTEXT No     No       title              0

代码

 Column      Type      Null 
     id     varchar(35) No       
     vid_id varchar(35) No       
     name   varchar(15) No       

    Keyname Type    Unique  Packed  Column  Cardinality Collation
    vid_id  BTREE   Yes      No     vid_id      0      A        
    name    FULLTEXT No      No     name        0

将为查询提供一个vid_id。我真的不确定最好的方法是什么,所以任何专家意见都会真的很受欢迎。

1 个答案:

答案 0 :(得分:1)

我会做一个

SELECT vid_id, COUNT(*) as count 
   FROM tags 
   WHERE name IN('list','of','videos','tags') 
   GROUP BY vid_id
   ORDER BY count DESC

如果您选择在上面的评论中使用该方法,则会稍微复杂一些。

您需要先

SELECT id FROM tags WHERE name IN('list','of','video','tags')

然后,使用那些标签ID

SELECT vid_id, COUNT(*) as count
   FROM tags_videos
   WHERE tag_id IN(list,of,tag,ids)
   GROUP BY vid_id
   ORDER BY count DESC

您可能仍然可以在一个查询中执行此操作,但它会使用一些丑陋的连接,并且速度差异可能不会太显着。