Erreur requete suite à changement d'hebergeur

Eléphant du PHP | 149 Messages

02 févr. 2006, 16:03

Bonjur à tous!

Je viens de changer d'hebergeur et lors des tests, j'ai une erreur de syntaxe qui n'apparaissait pas sur l'ancien hebergeur. je n'arrive pas à savoir où se situe mon erreur car j'ai vérifié ma base et tout est bon, peut etre pouvez-vous m'aider à savoir que je suis maintenant hébergé chez OVH .

Voici la requete:

Code : Tout sélectionner

SELECT a.maj_id, DATE_FORMAT(a.maj_date,'%Y%m%d') AS maj_datefr, a.maj_fichier, a.maj_status, b.fab_nom, b.fab_rep, c.type_nom, c.type_cat FROM fabricant b, type c LEFT JOIN maj a, rel_abo_client d ON a.fab_id = b.fab_id AND a.type_id = c.type_id AND d.abo_id = c.abo_id WHERE a.maj_id IS NOT NULL AND d.client_id='2'
Et voici l'erreur :

Code : Tout sélectionner

You have an error in your SQL syntax near ' rel_abo_client d ON a.fab_id = b.fab_id AND a.type_id = c.type_id AND d.abo_id ' at line 1
Je ne sais pas si je dois donner plus de détails, auquel cas dites-le moi

Merci pour votre aide!

Manuscle
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Mammouth du PHP | 19672 Messages

02 févr. 2006, 16:17

Sous toutes réserves, c'est peut-être bien le AND dans un LEFT JOIN qui bloque. Proposition non testée :

Code : Tout sélectionner

SELECT a.maj_id, DATE_FORMAT(a.maj_date,'%Y%m%d') AS maj_datefr, a.maj_fichier, a.maj_status, b.fab_nom, b.fab_rep, c.type_nom, c.type_cat FROM `fabricant` AS b, `type` AS c LEFT JOIN `maj` AS a ON b.fab_id = a.fab_id LEFT JOIN `maj` AS a ON c.type_id = a.type_id LEFT JOIN `rel_abo_client` AS d ON c.abo_id = d.abo_id WHERE a.maj_id IS NOT NULL AND d.client_id = '2';
Mais sans garantie aucune, j'ai un doute sur quelques points.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 févr. 2006, 16:50

Essaye en mettant des parenthèses autour des jointures

Code : Tout sélectionner

SELECT a.maj_id, DATE_FORMAT(a.maj_date,'%Y%m%d') AS maj_datefr, a.maj_fichier, a.maj_status, b.fab_nom, b.fab_rep, c.type_nom, c.type_cat FROM (((`fabricant` AS b, `type` AS c LEFT JOIN `maj` AS a ON b.fab_id = a.fab_id) LEFT JOIN `maj` AS a ON c.type_id = a.type_id) LEFT JOIN `rel_abo_client` AS d ON c.abo_id = d.abo_id) WHERE a.maj_id IS NOT NULL AND d.client_id = '2';
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 | 149 Messages

02 févr. 2006, 17:04

La réponse de cyrano est bonne, j'ai refait la requete et maintenant ça fonctionne correctement! Par contre il ne faut pas mettre deux fois "LEFT JOIN maj AS a" car sinon il renvoie cette erreur : "Not unique table/alias : 'a' ", j'ai donc fait la requete suivante :

Code : Tout sélectionner

$select = "SELECT a.maj_id, DATE_FORMAT(a.maj_date,'%Y%m%d') AS maj_datefr, a.maj_fichier, a.maj_status, b.fab_nom, b.fab_rep, c.type_nom, c.type_cat "; $select .= "FROM fabricant AS b, type AS c "; $select .= "LEFT JOIN maj AS a ON a.fab_id = b.fab_id LEFT JOIN maj ON a.type_id = c.type_id LEFT JOIN rel_abo_client AS d ON d.abo_id = c.abo_id "; $select .= "WHERE a.maj_id IS NOT NULL "; $select .= "AND d.client_id = '$id'";
Je n'ai pas vérifié si ça marche aussi avec les parenthèses....

Merci encore pour votre aide! ça faisait longtemps que je n'étais pas venu sur phpFrance, mais ça a l'air toujours aussi sympa! :wink:
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.