Цель: получить все видео, которые соответствуют тегам, которые понравился пользователю (команды и игроки)...
У меня четыре таблицы.
Мне нужно получить все пользовательские игроки из таблицы 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} )
Ответ состоял в том, что я должен был сделать это в два этапа. Во-первых, получите все отмеченные видео с помощью Союза. Я использовал "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/>';
}