2014-05-03 2 views
0

j'ai 3 tables comme indiqué ci-dessous:MYSQL Interrogation ne pas retourner les dossiers attendus

subscription_plans

enter image description here

subscribed_videos

enter image description here

subscription_groups

enter image description here

Je veux trouver les plans correspondant à la vidéo sélectionnée (tableau subscription_plans). Le tableau subscription_groups contient le mappage du plan de plan, c'est-à-dire qu'un plan peut faire partie d'un autre plan. Par exemple, le Plan A, le Plan B et le Plan C. Le Plan A contient à la fois le Plan B et le Plan avec l'ID 5 fait partie du Plan B (tableau subscribed_videos), puis la requête pour trouver les plans correspondant à la vidéo 5 devrait retourner le plan A avec le plan B. Les documents devraient également être distincts.

J'ai essayé avec la requête suivante. Mais si j'ajoute un plan qui n'a pas d'entrée dans subscription_groups, alors cet enregistrement ne revient pas avec cette requête.

$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"; 

Quelqu'un peut-il m'aider à trouver la bonne requête pour cela? Merci d'avance.

Répondre

1

Je pense que les sous-requêtes ont un sens pour cette requête. La première sous-requête sélectionne l'ID du plan de votre vidéo et la deuxième sous-requête sélectionne les ID des plans associés.

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 affiche l'erreur 'sous-requête renvoie plus de 1 row' – Jenz

+0

@Jenz mis à jour la demande de recherche pour permettre à plusieurs rangées dans la sous-requête (IN au lieu de '=') – FuzzyTree

+0

@ Fuzzy..Thankyou si beaucoup..Il a bien travaillé .. – Jenz

Questions connexes