简体   繁体   English

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

[英]MYSQL Query - Using Select Statement in Where Clause

Objective: Get all videos that match tags a user has liked (teams and players)... 目标:获取所有与用户喜欢的标签(团队和球员)匹配的视频...

I have four tables. 我有四个桌子。

I need to get get all of a user's players from the user_player_tracker table 我需要从user_player_tracker表中获取所有用户的玩家

I need to get get all of a user's teams from the user_team_tracker table 我需要从user_team_tracker表中获取所有用户团队

I need to find all tags where a user's players or a user's teams exist from the user_video_tags table 我需要从user_video_tags表中找到用户的球员或用户的球队所在的所有标签

I need to ultimately get the id and video_url where the user_video_tags video_id are the id from user_videos 我最终需要获取id和video_url,其中user_video_tags video_id是user_videos的ID

I can't wrap my head around how to do this all, here is what I have so far... 我无法全力以赴地做这一切,这就是我到目前为止所拥有的...

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

The answer was that I had to do this in two steps. 答案是我必须分两个步骤执行此操作。 First, get all the tagged videos using a Union. 首先,使用联盟获取所有带标签的视频。 I used 'group by' to not get any duplicates in each query, and the 'union' instead of 'union all' got me all unique video_id's from the combined results. 我使用“分组依据”在每个查询中都没有任何重复项,并且“联合”而不是“全部联合”使我从合并结果中获得了所有唯一的video_id。 I ordered the list of videos using php arsort($results) because I couldn't figure out how to order using group by and union in the mysql statement. 我使用php arsort($ results)订购了视频列表,因为我不知道如何在mysql语句中使用group by和union进行订购。 After that I just had to loop through each result to get the video for each tag. 之后,我只需要遍历每个结果即可获取每个标签的视频。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM