erreur syntaxe requete

Eléphant du PHP | 171 Messages

07 déc. 2005, 13:26

Bonjour,
j'essaye d'executer la requete suivante mais j'ai une erreur de syntaxe:
select p.products_id, p.products_image, p.products_tax_class_id, if(s.status, s.specials_new_products_price, p.products_price) as products_price from products where products_id=22 p left join specials s on p.products_id = s.products_id where products_status = '1' order by p.products_date_added desc limit 3
L'erreur semble se trouver à ce niveau:
where products_id=22 p left join 
Quelqu'un voit-il ce qui ne va pas?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 déc. 2005, 13:27

Quelle est cette erreur ?

sinon, dans l'ordre, je vois, SELECT FROM WHERE LEFT JOIN WHERE ORDER BY alors qu'il faut SELECT FROM LEFT JOIN WHERE ORDER BY
Tu doit grouper tes conditions WHERE après la jointure
de plus, à quoi correspond le if dans le select ? :shock:
Modifié en dernier par zeus le 07 déc. 2005, 13:29, modifié 1 fois.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 171 Messages

07 déc. 2005, 13:28

1064 - Erreur de syntaxe près de 'p left join specials s on p.products_id = s.products_id where pr' à la ligne 1

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 déc. 2005, 15:14

La précision d'une jointure (JOIN) se fait dans la clause FROM et non dans la clause WHERE.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 déc. 2005, 15:17

De plus, ta requête contient 2 clauses WHERE. :evil:

Enfin, si ton champ products_status est de type numérique, n'utilise pas d'apostrophes autour de la valeur 1
et s'il ne l'est pas, c'est sans doute une erreur de modélisation... ;)

Code : Tout sélectionner

SELECT P.products_id, P.products_image, P.products_tax_class_id, if(S.status, S.specials_new_products_price, P.products_price) AS products_price FROM products P LEFT JOIN specials S on P.products_id = S.products_id WHERE products_id=22 AND products_status = 1 ORDER BY P.products_date_added DESC LIMIT 3

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 déc. 2005, 15:19

Dernier point.
Puisque tu as eu la bonne idée de donner des alias (P et S) à tes tables,
n'oublie pas de les utiliser pour préfixer tous tes champs.
Notamment dans la clause WHERE.

Code : Tout sélectionner

WHERE P.products_id=22 AND P.products_status = 1

Eléphant du PHP | 171 Messages

07 déc. 2005, 20:11

ça marche beaucoup mieux après vos remarques. merci!

Mammouth du PHP | 19672 Messages

07 déc. 2005, 22:24

Un petit [Résolu] serait-il approprié :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 171 Messages

08 déc. 2005, 11:37

tout à fait, cher Maître.