2014-05-03 61 views
0

我有3個表,如下圖所示:MySQL查詢沒有返回預期的記錄

subscription_plans

enter image description here

subscribed_videos

enter image description here

個subscription_groups

enter image description here

我想找到對應於所選視頻(表subscription_plans)的計劃。表subscription_groups包含計劃 - 計劃映射,即計劃可以是另一計劃的一部分。例如,計劃A,計劃B和計劃C.計劃A包含計劃B和計劃C,並且具有ID 5的視頻是計劃B的一部分(表subscribed_videos),則用於查找對應於視頻5的計劃的查詢應該將計劃A與計劃B一起退回。記錄應該是不同的。

我試着用下面的查詢。但是,如果我添加的計劃在subscription_groups中沒有條目,則該記錄不會返回此查詢。

$videoid=$_POST['videoid']; 
echo "select sv.plan_id,sg.plan_id,sp.id,sp.plan,sp.days_limit,sp.rate from subscribed_videos as sv 
    LEFT JOIN subscription_groups as sg ON sv.plan_id=sg.assosiated_plan_id INNER JOIN 
    subscription_plans as sp ON sv.plan_id=sp.id where sg.assosiated_plan_id=sv.plan_id and sv.videoid=$videoid 
    and sg.assosiated_plan_id=sp.id"; 

任何人都可以幫助我找到適當的查詢嗎?提前致謝。

回答

1

我認爲子查詢對此查詢有意義。第一個子查詢選擇視頻計劃的ID,第二個子查詢選擇相關計劃的ID。

SELECT 
    sp.id, 
    sp.plan, 
    sp.days_limit, 
    sp.rate 
FROM 
    subscription_plans sp 
WHERE 
    id IN (SELECT DISTINCT plan_id FROM subscribed_videos sv where sv.videoid = $videoid) 
    OR id IN (SELECT DISTINCT assosiated_plan_id 
     FROM subscription_groups sg 
     JOIN subscribed_videos sv ON sv.plan_id = sg.plan_id 
     WHERE sv.videoid = $videoid) 
+0

@ Fuzzy..It是示出錯誤'子查詢返回多於1個row' – Jenz

+0

@Jenz更新查詢,以允許在子查詢中的多個行(IN,而不是 '=') – FuzzyTree

+0

@ Fuzzy..Thankyou所以很多..它運作良好.. – Jenz