2010-03-29 4 views
0

Comment traiter une instruction join si l'une des tables jointes ne contient aucune donnée pour l'utilisateur.MySQL JOIN, via PHP, quand il n'y a pas de données dans l'une des tables?

Par exemple:

-user_1 est listé dans toutes les tables.

-user_2 est répertorié dans table_1, table_2 et table_3 mais pas dans table_4.

La requête suivante échoue car l'utilisateur 2 n'est pas dans la table 4.

$query = "SELECT table_1.username, table_2.car, table_3.bike, table_4.plane 
    FROM table_1 
    JOIN table_2 
     ON table_1.username=table_2.username 
    JOIN table_3 
     ON table_1.username=table_3.username 
    JOIN table_4 
     ON table_1.username=table_4.username 
    WHERE table_1.username = 'user_2'"; 

Répondre

1

Regardez dans un OUTER JOIN. Il permet les enregistrements d'un côté, mais optionnels de l'autre (extérieur gauche/extérieur droit). Si aucun enregistrement trouvé sur le "autre" tableau, sa colonne se traduira par être NULL dans le jeu de résultats, donc attention à cela

2

Typiquement dans un tel cas, vous auriez un LEFT JOIN.

Quelque chose comme

SELECT table_1.username, table_2.car, table_3.bike, table_4.plane 
    FROM table_1 
    JOIN table_2 
     ON table_1.username=table_2.username 
    JOIN table_3 
     ON table_1.username=table_3.username 
    LEFT JOIN table_4 
     ON table_1.username=table_4.username 
    WHERE table_1.username = 'user_2' 

Cela pourrait aussi être le cas, dans l'une des autres tables, même si cela pourrait être plus serviable

SELECT table_1.username, table_2.car, table_3.bike, table_4.plane 
    FROM table_1 
    LEFT JOIN table_2 
     ON table_1.username=table_2.username 
    LEFT JOIN table_3 
     ON table_1.username=table_3.username 
    LEFT JOIN table_4 
     ON table_1.username=table_4.username 
    WHERE table_1.username = 'user_2' 
Questions connexes