MYSQL Query - Использование оператора Select в предложении Where

0

Цель: получить все видео, которые соответствуют тегам, которые понравился пользователю (команды и игроки)...

У меня четыре таблицы.

Мне нужно получить все пользовательские игроки из таблицы user_player_tracker

Мне нужно получить все пользовательские команды из таблицы user_team_tracker

Мне нужно найти все теги, где пользовательские игроки или пользовательские команды существуют из таблицы user_video_tags

Мне нужно в конечном итоге получить id и video_url, где user_video_tags video_id - это идентификатор пользователя user_videos

Я не могу окунуться в голову, как это сделать, вот что я до сих пор...

SELECT v.id, v.video_url FROM user_videos v
LEFT JOIN user_video_tags t
ON t.video_id = v.id
WHERE (
    SELECT t.video_id FROM user_video_tags t
    LEFT JOIN user_player_tracker up 
    ON up.site_id = t.site_id AND up.player_id = t.player_id
    WHERE up.user_id = {$userid} )
|| (
    SELECT t.video_id FROM user_video_tags t
    LEFT JOIN user_team_tracker ut 
    ON ut.site_id = t.site_id AND ut.team_id = t.player_id
    WHERE ut.user_id = {$userid} ) 
Теги:

1 ответ

0

Ответ состоял в том, что я должен был сделать это в два этапа. Во-первых, получите все отмеченные видео с помощью Союза. Я использовал "group by", чтобы не получать дубликатов в каждом запросе, а "union" вместо "union all" получил от меня все уникальные видеоиды из комбинированных результатов. Я заказал список видеороликов, используя php arsort ($ results), потому что я не мог понять, как упорядочить с помощью group by и union в инструкции mysql. После этого мне просто нужно было пройти каждый результат, чтобы получить видео для каждого тега.

    $results = $wpdb->get_results("
    SELECT t.video_id FROM user_video_tags t
    LEFT JOIN user_player_tracker up 
    ON up.site_id = t.site_id AND up.player_id = t.player_id
    WHERE up.user_id = {$userid}
    GROUP BY t.video_id
    UNION
    SELECT t.video_id FROM user_video_tags t
    LEFT JOIN user_team_tracker up 
    ON up.site_id = t.site_id AND up.team_id = t.team_id
    WHERE up.user_id = {$userid}
    GROUP BY t.video_id
    LIMIT 20");

    arsort($results);

if($results){
    foreach ($results as $item) {
        // call another function that gets the video
        $html .= get_media($item->video_id);
    }
} else {
    $html .= 'No videos found for this user, wEird.<br/>';
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню