![](/img/trans.png)
[英]Using mysql Regexp in a select statement not the where clause
[英]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.