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;
    }