簡體   English   中英

MYSQL查詢-在Where子句中使用Select語句

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

目標:獲取所有與用戶喜歡的標簽(團隊和球員)匹配的視頻...

我有四個桌子。

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

答案是我必須分兩個步驟執行此操作。 首先,使用聯盟獲取所有帶標簽的視頻。 我使用“分組依據”在每個查詢中都沒有任何重復項,並且“聯合”而不是“全部聯合”使我從合並結果中獲得了所有唯一的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/>';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM