Во-первых, у меня есть три таблицы: видео, теги и тегвидео. Я уже присоединился к трем таблицам, используя левое соединение.
Моими текущими задачами является отображение списка связанных видео на основе текущих тегов видео. Пока я могу выводить текущие теги видео и пытаться сохранить их в массиве, где они будут использоваться в алгоритме решения «toxi».
Хотя я следовал процедуре решения «токси», я все же столкнулся с ошибками: Объект класса stdClass не может быть преобразован в строку, который он указывает на модель ($ this-> db-> where_in (‘tag.tag_id’, $ result);) и для базы данных: Не уникальная таблица / псевдоним: ‘video’.
Я хочу связать полученные теги с его video_id в таблице tagvideo, Табличная диаграмма Тагвидео
я уже проверил внутреннюю часть $ результата, я предположил, что это уже в виде массива.
Используя это:echo '<pre>'.var_export($result, true).'</pre>'; exit;
,
Я следую инструкциям по этой ссылке: http://developer-paradize.blogspot.com/2013/12/how-to-display-search-results-with.html
контроллер:
public function view($videoId)
{
if ($videoId == null)
{
redirect ('video/index');
}
else {
$videoDetails = $this->video_model->getVideoDetails($videoId);
$relatedVideo = $this->video_model->getRelated($videoId);
$data = array (
'videoDetails' => $videoDetails,
'relatedVideo' => $relatedVideo
);
$this->load->view('video/userdisplay' , $data);
}
}
Модель:
public function getRelated($videoId)
{
//output the current video tags
$this->db->select('tag.tag_id');
$this->db->from('video','tagmap','tag');
$this->db->join('tagmap', 'tagmap.video_id=video.video_id','left');
$this->db->join('tag', 'tag.tag_id=tagmap.tag_id','left');
$this->db->where('tagmap.video_id', $videoId);
$query = $this->db->get();
if( $query->num_rows() > 0 )
{
$result = $query->result();
//show related videos based on the tags
$this->db->select('video.*');
$this->db->from('video','tagmap','tag');
$this->db->join('tagmap', 'tagmap.video_id=video.video_id','left');
$this->db->join('tag', 'tag.tag_id=tagmap.tag_id','left');
$tag_count = count($result);
$this->db->where_in('tag.tag_id', $result);
$this->db->group_by('video.video_id');
$count = "COUNT(video.video_id) =".$tag_count;
$this->db->having($count);
$query2 = $this->db->get('video');
return ($query2->num_rows() > 0) ? $query2->result() : FALSE;
}
else
{
return FALSE;
}}
Посмотреть:
<b>Related videos:<b>
<?php if (!empty($relatedVideo)): ?>
<?php foreach($relatedVideo as $item):?>
<?php echo $item->video_topic?>
<?php endforeach;?>
<?php else: ?>
<?php echo "No related videos." ?>
<?php endif; ?>enter code here
Задача ещё не решена.
Других решений пока нет …