我正在开发一个PHP应用程序,其中包括一个视频部分。到目前为止,我已经构建了视频标记作为视频分类。当你添加一个视频,你可以选择25个预定义的标签,其中一个描述你的视频内容最好。
然后将这些标记保存在一个单独的表videotags中,该表如下所示:
video_id | first_tag | second_tag | third_tag | etc.
----------------------------------------------------
123 | 1 | 0 | 1| ...这意味着,当您签入表单--一些标记时,它作为1存储在数据库中,未选中为0。
现在,当你看到一个视频,你可以看到一个主体,视频和描述,和一个正确的列,在那里应该有类似的视频。
我想构建一个MySQL查询,它将返回6个类似的视频,基于具有如下规则的视频标记:
这些视频,有着与观看视频最相同的视频标签,将被订购,并限制在6.。
例如,我试图查看一个ID为12的视频,它有6个已填充的标签,而在我的数据库中,我有3个视频:
正如我在主题名称中提到的,我正在CodeIgniter中构建这个$tags应用程序,所以这个查询将作为一个函数在一个特定的模型中运行,我将在这个函数中传递类似于这个$tags['first_tag'] = 1的数组$tags。
有人能帮助我按指定的方式构建这个查询吗?我是在CI的活动记录类工作,所以使用它将是徒劳无功。
谢谢各位的回应
发布于 2013-02-25 05:30:11
查询应该如下所示:
SELECT video_id
FROM videotags
ORDER BY ABS(
first_tag - 1 +
second_tag - 0
) ASC
LIMIT 3在ActiveRecord函数中,如下所示:
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);
}请注意,我还没有测试它。而且,对于许多行,查询将相当慢。
https://stackoverflow.com/questions/15055661
复制相似问题