PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 24-02-2013 18:07:40

tapi
Membre
Inscription : 16-08-2010
Messages : 27

Select imbriqués et jointure

Bonjour,
Dans ce script comment feriez-vous pour récupérer des champs de la table "Porter" ?

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;

Merci

Hors ligne

#2 24-02-2013 19:16:54

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Select imbriqués et jointure

Saluton,
Par définition, le filtre WHERE, dans cette requête, fait que les lignes de résultats retournées seront précisément celles pour lesquelles la jointure entre les tables n'aura pas pu s'opérer.
Donc, je ne sais pas trop comment te le dire en restant courtois, ta question n'a pas de sens.
Désolé.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 25-02-2013 17:01:18

tapi
Membre
Inscription : 16-08-2010
Messages : 27

Re : Select imbriqués et jointure

Le problème c'est que je n'ai pas trouvé rien de mieux. J'ai donc adapté ce script à ma problématique, l'ennui c'est que ça donne un résultat faux :
Le résultat de NB_TOT n'est pas bon.

$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 and m.LIBELLE_ACTION='action1'
WHERE m.CCIBLE=0 and m.DRR='41270' GROUP BY m.DGAA"
) or die (mysql_error());
while($array = mysql_fetch_assoc($query))
{
print $array['lib_dga'];echo "<br>";
print $array['NB_TOT'];echo "<br>";
}

Merci

Hors ligne

#4 25-02-2013 18:04:44

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Select imbriqués et jointure

Déjà ta requête n'est pas normalisée. MySQL est très laxiste et permissif avec GROUP BY, du coup les débutants se retrouvent parfois  avec des résultats incohérents parce qu'ils ne maîtrisent pas ce qui s'y passe.
Ainsi la colonne invoquée dans le GROUP BY ne figure pas dans le SELECT.
Ensuite tu mélanges les conditions de jointure avec celle de filtrage. Il faut être beaucoup plus rigoureux, en SQL le diable est souvent dans le détail.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 25-02-2013 20:12:22

nicolas
Membre
Inscription : 11-11-2009
Messages : 69
Site Web

Re : Select imbriqués et jointure

Maljuna Kris a écrit :

Déjà ta requête n'est pas normalisée. MySQL est très laxiste et permissif avec GROUP BY, du coup les débutants se retrouvent parfois  avec des résultats incohérents parce qu'ils ne maîtrisent pas ce qui s'y passe.
Ainsi la colonne invoquée dans le GROUP BY ne figure pas dans le SELECT.
Ensuite tu mélanges les conditions de jointure avec celle de filtrage. Il faut être beaucoup plus rigoureux, en SQL le diable est souvent dans le détail.

ça fait plaisir de lire des messages comme ça. Je l'ai répété pendant des années mais on me sortait ça marche avec mysql donc ce sont les autres qui sont pourris.

Hors ligne

#6 01-03-2013 20:55:21

tapi
Membre
Inscription : 16-08-2010
Messages : 27

Re : Select imbriqués et jointure

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

Hors ligne

#7 02-03-2013 09:05:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Select imbriqués et jointure

tapi a écrit :

En fin de compte mon problème devait venir du fait que des champs liés devraient porter le même nom (?)

Evidemment pas.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 02-03-2013 09:10:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Select imbriqués et jointure

Passer par un DISTINCT et un sub-select pour faire ça, c'est un peu comme balancer la poussière sous le tapis quand on fait le ménage.
Outre le fait qu'un sub-select est toujours beaucoup plus lent qu'une jointure.

A toujours repousser la résolution des problèmes conceptuels à plus tard, on se retrouve avec un "machin" mal foutu et bancal qui plante à la première anicroche.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums