2014-06-20 8 views
1

j'ai l'instruction select suivantesélectionnez mysql où dans sélectionnez comme variables

SELECT 
    a.firstname name, 
    m.date time 
FROM 
    account a 
    LEFT JOIN memberships m ON a.id = m.account_id 
WHERE 
    a.is_active = 1 

je suis en train vérifier et voir si l'utilisateur a un membre actif (il pourrait y avoir plus d'un, mais on est tout ce qu'il faut comme preuve) et si oui, la variable vraie ou l'identifiant ou quelque chose, sinon alors faux (ou nulle ou autre)

voici ce que j'ai jusqu'à présent

SELECT 
    a.firstname name, 
    p.date time 
    m.id active_membership 
FROM 
    account a 
    LEFT JOIN profile p ON a.id = p.account_id 
WHERE 
    a.id IN (SELECT DISTINCT account_id FROM memberships WHERE active = 1) 
AND 
    a.is_active = 1 

donc les résultats que je suis essayer d'obtenir wo ULD être le nom , le temps, active_membership foo, 10:00, null bar , 14:00, 223 (id ou quoi que ce soit)

je suis tout accepter pour travailler la partie où, en ...

+0

Les adhésions ont-elles plus d'une colonne? – dcclassics

+0

Il semble que vous ayez besoin de ['EXISTS'] (http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html) ici. –

+0

votre adhésion a beaucoup plus de colonnes – seesoe

Répondre

2

Vous avez besoin d'un autre LEFT JOIN.

SELECT 
    a.firstname name, 
    p.date time, 
    IF(m.account_id IS NULL, "No", "Yes") active_membership 
FROM account a 
LEFT JOIN profile p ON a.id = p.account_id 
LEFT JOIN (SELECT DISTINCT account_id 
      FROM memberships 
      WHERE active = 1) m ON a.id = m.account_id 
WHERE a.is_active = 1 
+0

Pourquoi ne pouvez-vous pas simplement ajouter les appartenances LEFT JOIN m sur a.id = m.account_id AND m.active = 1'? – tadman

+2

Parce que si quelqu'un a plusieurs appartenances, cela créera plusieurs lignes dans le résultat. – Barmar

+0

Vous pouvez l'utiliser, mais vous devez ajouter 'GROUP BY a.id' à la fin. – Barmar