0 votes

Jointures multiples à gauche, comment les produire en php ?

J'ai 3 tables que je dois joindre. La table des contrats est la table principale, les tables 'emplois' et 'entreprises' sont des informations supplémentaires qui peuvent être associées à la table des contrats.

Donc, puisque je veux toutes les entrées de ma table 'contrats', et les données 'emplois' et 'entreprises' seulement si elles existent, j'ai écrit la requête comme ceci....

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

Comment puis-je afficher cela en PHP ? J'ai essayé ceci mais j'ai obtenu une erreur indé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.

1voto

David M Points 45808

Les noms des colonnes ne seront pas préfixés de cette façon - et comme chaque table a une colonne appelée "id", vous pourriez avoir des problèmes. Vous devez identifier explicitement les colonnes que vous voulez récupérer plutôt que d'utiliser "select *", et vous récupérez ensuite la colonne par son nom non préfixé (par exemple, "id"). $row['job_number'] ).

0voto

Lizard Points 10620

Le texte ci-dessous résoudra votre 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 probablement lié au fait que vous utilisez deux tableaux avec le champ id c'est pourquoi vous devez les sélectionner comme alias en utilisant la fonction mysql as clause.

Vous pouvez également envisager d'utiliser une convention de dénomination pour vos champs et de vous y tenir. Par exemple, consultez la théorie de Hungarian Notation Cela permettrait d'éviter que des problèmes de ce genre ne se posent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X