2010-04-14 8 views
0

J'ai 3 tables à joindre. La table des contrats est la table principale, les tables 'jobs' et 'companies' sont des informations supplémentaires qui peuvent être associées à la table des contrats.Plusieurs jointures à gauche, comment sortir en php

, puisque je veux toutes les entrées de ma table « contrats » et les données « emplois » et «entreprises que si elle existe, j'ai écrit comme requête .... ce

$sql = "SELECT * FROM contracts 
     LEFT JOIN jobs ON contracts.job_id = jobs.id 
     LEFT JOIN companies ON contracts.company_id = companies.id 
     ORDER BY contracts.end_date"; 

Maintenant, comment est-ce que je sortirais ceci en PHP? J'ai essayé mais je continuais à une erreur non définie "Notice: Undefined index: contracts.id" ...

$sql_result = mysql_query($sql,$connection) or die ("Fail."); 

if(mysql_num_rows($sql_result) > 0){ 

    while($row = mysql_fetch_array($sql_result)) 
    { 
     $contract_id = stripslashes($row['contracts.id']); 
     $job_number = stripslashes($row['jobs.job_number']); 
     $company_name = stripslashes($row['companies.name']); 
    ?> 
     <tr id="<?=$contract_id?>"> 
      <td><?=$job_number?></td> 
      <td><?=$company_name?></td> 
     </tr> 
    <? 
    } 
}else{ 
    echo "No records found"; 
} 

Toute aide est appréciée.

+0

vous voudrez peut-être utiliser "alias" pour rendre le processus de simplification des données ... – Hanseh

Répondre

1

Les noms de colonnes ne seront pas préfixés comme ceci - et avec chaque table ayant une colonne appelée "id" vous pourriez être en difficulté. Vous devez identifier explicitement les colonnes que vous voulez renvoyer plutôt que d'utiliser "select *", et vous n'avez qu'à récupérer la colonne par son nom non préfixé (par exemple, $row['job_number']).

+0

fonctionne comme un charme. Je vous remercie! – uberdanzik

0

Le ci-dessous pourrait vous aider à résoudre le problème.

$sql = "SELECT contracts.id AS contract_id, jobs.job_number, companies.name FROM contracts 
     LEFT JOIN jobs ON contracts.job_id = jobs.id 
     LEFT JOIN companies ON contracts.company_id = companies.id 
     ORDER BY contracts.end_date"; 

Votre problème est susceptible d'être Realted au fait que vous utilisez deux tables avec le champ id c'est pourquoi vous devez les choisir comme un alias en utilisant la clause mysql as.

Vous pouvez également vous intéresser à l'utilisation d'une convention de dénomination pour vos champs et y coller. Par exemple, consultez la théorie de Hungarian Notation, cela permettrait d'arrêter des problèmes comme celui-ci d'arrissing.

+0

Ne résout pas entièrement le problème, qui est lié à la récupération des colonnes en utilisant des noms préfixés. –

Questions connexes