MYSQL查询 - 在Where子句中使用Select语句

时间:2017-12-22 11:06:03

标签: mysql

目标:获取与用户喜欢的标签匹配的所有视频(团队和玩家)......

我有四张桌子。

我需要从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} ) 

1 个答案:

答案 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/>';
}