目标:获取与用户喜欢的标签匹配的所有视频(团队和玩家)......
我有四张桌子。
我需要从user_player_tracker表中获取所有用户的玩家
我需要从user_team_tracker表中获取所有用户的团队
我需要从user_video_tags表中找到用户的玩家或用户团队所在的所有标签
我需要最终获取id和video_url,其中user_video_tags video_id是来自user_videos的id
我无法理解如何做到这一切,这是我到目前为止所拥有的......
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} )
答案 0 :(得分:0)
答案是我必须分两步完成。首先,使用联盟获取所有标记的视频。我用' group by'不要在每个查询中得到任何重复,并且' union'而不是联合所有'从合并的结果中得到了我所有独特的video_id。我使用php arsort($ results)订购了视频列表,因为我无法弄清楚如何在mysql语句中使用group by和union来订购。之后我只需循环遍历每个结果以获取每个标签的视频。
$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/>';
}