首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL通过视频标记(CodeIgniter)查询类似视频

MySQL通过视频标记(CodeIgniter)查询类似视频
EN

Stack Overflow用户
提问于 2013-02-24 19:28:51
回答 1查看 282关注 0票数 0

我正在开发一个PHP应用程序,其中包括一个视频部分。到目前为止,我已经构建了视频标记作为视频分类。当你添加一个视频,你可以选择25个预定义的标签,其中一个描述你的视频内容最好。

然后将这些标记保存在一个单独的表videotags中,该表如下所示:

代码语言:javascript
复制
video_id | first_tag | second_tag | third_tag | etc.
----------------------------------------------------
     123 |         1 |          0 |          1| ...

这意味着,当您签入表单--一些标记时,它作为1存储在数据库中,未选中为0。

现在,当你看到一个视频,你可以看到一个主体,视频和描述,和一个正确的列,在那里应该有类似的视频。

我想构建一个MySQL查询,它将返回6个类似的视频,基于具有如下规则的视频标记:

这些视频,有着与观看视频最相同的视频标签,将被订购,并限制在6.

例如,我试图查看一个ID为12的视频,它有6个已填充的标签,而在我的数据库中,我有3个视频:

  • 有7个标签和4个的ID 22的视频与ID 12的视频相同。
  • 有8个标签和5个的ID 25的视频与ID 12视频相同。
  • ID 45的视频有4个标签和3个是相同的ID 12视频。

正如我在主题名称中提到的,我正在CodeIgniter中构建这个$tags应用程序,所以这个查询将作为一个函数在一个特定的模型中运行,我将在这个函数中传递类似于这个$tags['first_tag'] = 1的数组$tags

有人能帮助我按指定的方式构建这个查询吗?我是在CI的活动记录类工作,所以使用它将是徒劳无功。

谢谢各位的回应

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 05:30:11

查询应该如下所示:

代码语言:javascript
复制
SELECT video_id 
FROM videotags 
ORDER BY ABS(
  first_tag - 1 +
  second_tag - 0
) ASC
LIMIT 3

在ActiveRecord函数中,如下所示:

代码语言:javascript
复制
function getTop($n, $tags) {
  $this->db->select('video_id');
  $order = array();
  foreach ($tags as $field => $value) {
    if ($value) {
      $order[] = $field .' - '. $value;
    }
  }
  $this->db->order_by('ABS('.implode(' + ', $order).')', 'ASC');
  return $this->db->get('videotags', $n);
}

请注意,我还没有测试它。而且,对于许多行,查询将相当慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15055661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档