Problème syntaxe requete SQL

Eléphant du PHP | 54 Messages

03 avr. 2007, 17:39

Bonjour,

Je suis contronté à léger soucis de syntaxe.

Ma requête fonctionne bien en local -> easyPhp (PhpMyAdmin 2.6.1)
en revanche quand je veux l'appliquer pour mon site (PhpMyAdmin 2.7.0 pl2) ca ne fonctionne pas, j'ai les message suivant :
#1064 - Erreur de syntaxe près de 'SELECT `ID_VEHICULE` FROM `vehicule` )
LIMIT 0, 30' à la ligne 1
Voici mon code :
$requete = "SELECT CHEMIN_PHOTO, ID_VEHICULE FROM photo WHERE ID_VEHICULE NOT IN(SELECT ID_VEHICULE FROM vehicule)";
    $connex->query($requete);	
    $connex->next_record();
J'ai cité les 2 versions de PhpMyAdmin car c'est la seule différence que je constate. Ceci étant je ne vois quelle modification apportée :(

Eléphant du PHP | 54 Messages

04 avr. 2007, 09:12

Je précise que j'ai bien les même tables aussi bien sur le site qu'en local.

une idée ? :idea:

Eléphant du PHP | 54 Messages

04 avr. 2007, 10:05

Après une recherche plus poussé sur Google, j'ai trouvé la solution

Les anciennes versions MySQL n'acceptent pas les requêtes imbriquées
* Avec une jointure externe pour remplacer une clause NOT IN.

SELECT * FROM table1 WHERE champ1 NOT IN (SELECT champ1 FROM table2)

devient :

SELECT table1.* FROM table1 LEFT JOIN table2
ON table1.champ1=table2.champ1
WHERE table2.champ1 IS NULL

Explication : contrairement à une jointure classique, le LEFT JOIN inclut aussi les enregistrements de table1 qui n'ont pas d'équivalent, c'est-à-dire un équivalent NULL, dans table2 (c'est précisément ceux-là qu'on recherche).
source -> http://mysql.developpez.com/faq/?page=COMPATIBILITE
Modifié en dernier par stomper98 le 04 avr. 2007, 10:17, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 avr. 2007, 10:14

Ce serait pas plutôt les anciennes version de MySQL qui n'acceptent pas les sous requêtes :-k (la version de phpMyAdmin étant indépendante de celle de mysql)

Quant à la jointure externe, elle permet effectivement une alternative à la sous requête dans ce cas, mais ça ne sera pas toujours possible :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 54 Messages

04 avr. 2007, 10:17

edit : erreur corrigée je n'avais pas relu ma phrase :D