JOIN LEFT {MYSQL}

Résolu
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   -  
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai une requete MYSQL avec JOINTURE :
SELECT `maTable`. * 
FROM `maTable`
LEFT JOIN `table1` ON maTable.id = table1.id
WHERE (
( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" )
AND 
( table.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" )
)
LIMIT 0 , 30


j'ai deux question :
1 - est ce qu'il y a une difference entre ces deux requette :
SELECT `maTable`. * 
FROM `maTable`
LEFT JOIN `table1` ON maTable.id = table1.id
where

et
SELECT `maTable`. * 
FROM `maTable`
LEFT JOIN `table1` ON table1.id = maTable.id  //j'ai changé les places des tables

2 - pourquoi quand je mets un AND entre les condition dans la clause where ça marche pas et quand je mets un OR ça marche..
par contre j'ai des donnees qui corespondent a ces deux condition
merci de m'aider
A voir également:

5 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
Pour la premiere question, je dirai à priori non...S'il y a difference, cela sera au niveau du cout de la requete et de l'optmiseur je pense..
Pour la deuxieme:
Etant donné que :
table.id =2 and table1.id =3 sera toujours faux dans la même requête...tu n'aura jamais de lignes...
@+
0
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   15
 
Re,
pr le premiere c bon
pr le 2eme j'ai pas compris pourquoi tu as dis table.id =2 and table1.id =3 sera toujours faux dans la même requête

il y a deux condition ds la clause where

condition1 = ( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" )
condition2 = ( table.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" )
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Par exemple,
id=3:
condition1 = ( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" ) =VRAI
condition2 = ( table.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" )=FAUX
condition1 and condition2=VRAI AND FAUX=FAUX
idem pour id=2...
condition1 = ( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" ) =FAUX
condition2 = ( table.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" )=VRAI
condition1 and condition2=FAUX AND VRAI=FAUX
0
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   15
 
chez moi les deux condition sont vrai
condition1 = ( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" ) =VRAI
condition2 = ( table.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" ) = VRAI
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
la table avec le nom 'table' elle sort d'où dans ta requte??
0
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   15
 
Re,
juste une erreur de tapage :

condition1 = ( table1.id =3 AND table1.champs = "test" AND table1.champs1 = "test" ) =VRAI
condition2 = ( table1.id =2 AND table1.champs = "valeur1" AND table1.champs1 = "valeur2" ) = VRAI
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
tu ne peux pas avoir les 2 conditions vrai dans la meme requete...
Dans la requete, quand on va balayer les id:
si table1.id=2, alors ta clause where:
condition2=vrai
condition1=faux->car tu veux que table1.id=3 donc FAUX
donc un 'and' (un ET logique) vrai ET faux va etre faux...
de meme quand table1.id=3...
Si c'est un OR (OU Logique),vrai OU faux=vrai donc tu as des resultats...
Bonne année!!
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devMan Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   15
 
Re,
merci de votre reponse,
j'ai trouvé une solution....c pas parfait ..... mais ça marche.
SELECT `maTable`.* 
FROM `maTable` 
Where (
id in (SELECT ID FROM `table1` WHERE (table1.champs1 =3 AND table1.champs2 = "test" AND table1.champs3 = "test")) 
and 
id in (SELECT ID FROM `table1` WHERE (table1.champs1 =2 AND table1.champs2 = "essai" AND table1.champs3 = "essai"))
)
0