public static function get_related_external_videos_for_tag_ids($external_video_library_id, $tag_ids, $external_video_provider_id = NULL, $ignore_video_id = NULL, $start = NULL, $duration = NULL) { /* * The idea is to order the videos by number of matching tags. To * give principal tags more weight, select them on their own * first and then union that with a selection of all tags. */ $tag_ids = VideoLibrary_DatabaseHelper::limit_tag_ids($tag_ids); $dbh = DB::m(); $principal_sql = self::get_sql_parts_for_external_videos_matching_any_of_these_tag_ids($external_video_library_id, $tag_ids, $external_video_provider_id, $ignore_video_id, $start, $duration, array('principal_tags' => TRUE)); $principal_sql['limit'] = ''; $normal_sql = self::get_sql_parts_for_external_videos_matching_any_of_these_tag_ids($external_video_library_id, $tag_ids, $external_video_provider_id, $ignore_video_id, $start, $duration, array('principal_tags' => FALSE)); $normal_sql['limit'] = ''; $query = ''; $query .= <<<SQL SELECT *, SUM(tag_count) as weighted_tag_count FROM( ( SQL; $query .= VideoLibrary_DatabaseHelper::assemble_query_from_sql_parts($principal_sql); $query .= <<<SQL ) UNION ALL ( SQL; $query .= VideoLibrary_DatabaseHelper::assemble_query_from_sql_parts($normal_sql); $query .= <<<SQL ) ) AS combined_table GROUP BY id ORDER BY weighted_tag_count DESC SQL; if (isset($start) && isset($duration)) { $query .= VideoLibrary_DatabaseHelper::get_limit_sql_for_external_videos($start, $duration); } // echo $start . ' - ' . $duration; // echo $query; exit; $result = mysql_query($query, $dbh); $videos = array(); while ($row = mysql_fetch_assoc($result)) { $videos[] = $row; } //print_r($tags);exit; return $videos; }