MYSQL查询未返回预期记录

时间:2014-05-03 05:37:09

标签: php mysql join left-join inner-join

我有3个表格如下所示:

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 个答案:

答案 0 :(得分: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)