Forum Clubic

Php mysql requêtes imbriquées

Bonjour,
Je viens de retrouver un vieux sujet mais qui m’a en partie dépanné.
Dans ce script :
SELECT Pays_Nom
FROM Pays LEFT JOIN Porter ON Pays.Pays_Code = Porter.Pays_code AND Porter.CRM_No=1
WHERE Porter.Pays_Code is null;
Imaginons que je veuille récupérer des champs de la table Porter. Comme le coderiez-vous ?
Merci

En les ajoutant dans ton select

Ex:
SELECT Pays_Nom, Porter.CRM_No, etc…

Comme tu as fait un left join, si la jointure n’existe pas tes champs provent de la table Porter ne seront simplement pas renseignés.

Ou avec des alias :

select PA.Pays_Nom, PO.CRM_No
from   Pays PA 
left join Porter PO on PA.Pays_Code = PO.Pays_code
      and PO.CRM_No=1
where PO.Pays_Code is null;

Merci pour ces réponses,
Je me suis donc inspirer de vos instructions pour écrire cela :
$query = mysql_query(“SELECT lib_dga, sum(m.NB_TOT) as NB_TOT
FROM structure LEFT JOIN m41000 as m ON structure.dga = m.DGAA
WHERE m.CCIBLE=0 and m.LIBELLE_ACTION=‘ACTION1’ and m.DRR=‘41250’ GROUP BY m.DGAA”) or die (mysql_error());
while($array = mysql_fetch_assoc($query))
{
print $array[‘lib_dga’];echo “
”;
print $array[‘NB_TOT’];echo “
”;
}

Sachant que le champ “lib_dga” fait parti de la table “structure” et le champ “NB_TOT” de la table m41000.
Le problème, c’est que le résultat de NB_TOT est faux.
Si vous aviez une idée …
Merci

Que veux tu dire par le résultat de NB_TOT est faux ?
Si certains NB_TOT apparaissent vide, c’est qu’il n’y a pas de valeur à NB_TOT pour le lib_dga en question répondant au critères de la jointure.

Sinon, ça ne solutionnera pas directement ton problème, mais joue ta requête dans mySQL Workbench ou phpmyadmin, et vérifie ce qui déconne.

Merci de ces réponses.
Quand je dis que le résultat est faux , c’est que le nombre de NB_TOT (de la table m41000) est multiplié, par le nombre de lignes de “lib_dga” de la table structure.

Et en remplacant GROUP BY par ORDER BY c’est mieux ?

Merci,
Non pas mieux ; ça cumul les NB_TOT au lieu de les détailler par DGAA.

Euréka, après des jours de recherches, j’ai trouvé ce script. En fin de compte mon problème devait venir du fait que des champs liés devraient porter le même nom (?)

$query = mysql_query("SELECT DISTINCT s.lib_dga, s.DGAA, m.NB_TOT
FROM structure as s INNER JOIN (SELECT DGAA, sum(NB_TOT) AS NB_TOT
FROM m41000 as m WHERE m.CCIBLE = 0 AND m.DRR = '41270' AND m.LIBELLE_ACTION = 'action1' 
GROUP BY m.DGAA) m ON s.DGAA=m.DGAA;") or die (mysql_error()); 

Merci à tous