[MySQL 5.0.18] Syntaxe du "NOT IN" modifiée?

Discussion dans 'Web, design' créé par k o D, 2 Novembre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    k o D Belge !
    Bonjour, ma question semble assez simple pour un habitué ;)

    Je développe des applications en PHP tout d'abord en local sur MySQL 4.1.10.
    Pour une de mes requêtes SQL, j'utilise un "NOT IN" qui tourne parfaitement en local.

    Seulement une fois que je met mes pages sur le net, sur le MySQL 5.0.18 j'obtiens une erreur de syntaxe... :roll:
    Mais pourquoi diable auraient-ils changé celà? :pfiou:

    Enfin voici ma requête:

    Code:
    SELECT idMembre,pseudo FROM membre WHERE acces=1 AND
    idMembre NOT IN(
    SELECT idMembre FROM membreTeam WHERE idLineUp='$_POST[idLineUp]'
    )
    Et voici l'erreur générée:

    Code:
    You have an error in your SQL syntax.
    Check the manual that corresponds to your MySQL server version for the right 
    syntax to use near 'SELECT idMembre FROM membreTeam WHERE idLineUp='6' )' at

    Voilà, merci d'avance pour votre réponse :cool:
    k o D, 2 Novembre 2006
    #1
  2. Offline
    II phl II Touriste
    es-tu sûr que cela provient du NOT IN

    J'ai déjà eu qq soucis avec des requêtes imbriquées (un SELECT dans un SELECT)
    En local : pas de prob
    Sur le server de mon hébergeur : erreur
    Ce que je fais dans ces cas-là, c'est faire une première requête et mettre son résultat dans une variable puis utiliser cette variable dans la requête principale

    expl :
    Code:
    //première requête :
    $select = 'SELECT count(id) FROM theme';
    $result = mysql_query($select)  or die ('Erreur : '.mysql_error() );
    $row = mysql_fetch_row($result);
    $total = $row[0];
    
    //requête principale
    $sql = "SELECT id,nom,date,DATE_FORMAT(date,'%d/%m/%Y') AS datefr FROM theme ORDER by date DESC LIMIT 1,$total";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    Donc je mets le résultat de la première requête en variable ($total)
    et j'utilise $total dans la principale

    Essaye toujours :-'
    II phl II, 2 Novembre 2006
    #2
  3. Offline
    Bingo Beer Addict
    C'est normal qu'il n'y ait pas d'espace entre ton "NOT IN" et ta parenthèse ?
    Je sais que depuis mysql 5.0, la syntaxe est "stricte" par défaut.
    Regarde dans la doc à SQL MODES , il y a notamment un chapitre sur IGNORE_SPACE.
    Bingo, 2 Novembre 2006
    #3
  4. Offline
    k o D Belge !
    Hum...

    Code:
    $req2="SELECT idMembre FROM membreTeam WHERE idLineUp='$_POST[idLineUp]'";
    $res2=mysql_query($req)or die('Erreur SQL !'.$sauv.'<br>'.mysql_error());
    							$row2 = mysql_fetch_object($res2);							
    							$req="SELECT idMembre,pseudo FROM membre WHERE acces=1 AND
    							idMembre NOT IN(
    								'$row2'
    							)";
    En effectuant ceci plus d'erreur de syntaxe, mais il ne tient pas compte du NOT IN.
    k o D, 2 Novembre 2006
    #4
  5. Offline
    k o D Belge !
    Même en mettant un espace après le NOT IN celà ne fonctionne pas.

    C'est bien ceci que tu voulais que je fasse:

    NOT IN (
    au lieu de
    NOT IN(
    k o D, 2 Novembre 2006
    #5
  6. Offline
    Bingo Beer Addict
    Oui c'était bien ça. C'est bizarre ton histoire.
    Et si tu remplaces "NOT IN" par "<> ALL" ?
    Bingo, 2 Novembre 2006
    #6
  7. Offline
    k o D Belge !
    Pourtant j'utilise bien la syntaxe présente dans le manuel:

    Code:
    SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);
    k o D, 2 Novembre 2006
    #7
  8. Offline
    Bingo Beer Addict
    Oui, avec l'espace la syntaxe est bonne.
    Sans l'espace c'est faux, mais c'est possible qu'il y ait eu une tolérance dans les versions précédentes.
    Bingo, 2 Novembre 2006
    #8
  9. Offline
    k o D Belge !
    Voici l'erreur retournée:

    Code:
    You have an error in your SQL syntax. 
    Check the manual that corresponds to your MySQL server version for 
    the right syntax to use near 'ALL (SELECT idMembre FROM membreTeam WHERE idLineUp='6')' at li
    Et pourtant en local encore une fois, çà tourne bien!

    Voici exactement mon code:

    Code:
    $req="SELECT idMembre,pseudo FROM membre WHERE acces=1
    AND idMembre NOT IN (SELECT idMembre FROM membreTeam WHERE idLineUp='$_POST[idLineUp]')";
    $res=mysql_query($req)or die('Erreur SQL !'.$sauv.'<br>'.mysql_error());
    while ($row = mysql_fetch_object($res)) {} 
    k o D, 2 Novembre 2006
    #9
  10. Offline
    Bingo Beer Addict
    Bizarre ça... Tu es sûr de ta version de MySQL en ligne ?
    Bingo, 2 Novembre 2006
    #10
  11. Offline
    k o D Belge !
    Donc bon...
    k o D, 2 Novembre 2006
    #11
  12. Offline
    Bingo Beer Addict
    Ouais, version 4.0 : pas de sous requêtes !
    Bingo, 2 Novembre 2006
    #12
  13. Offline
    k o D Belge !
    Mm désolé j'avais mal lu...
    Et en local, je tourne avec la version 4.1...

    Didju je vais regarder pour updater MySQL chez OVH.

    (Vive Sybase :-D )
    k o D, 2 Novembre 2006
    #13
  14. Offline
    Bingo Beer Addict
    Ouais, les versions pré-4.1 sont vraiment trop limitées.
    Demande si ils n'ont pas du PostgreSQL, y a que ça devrai ! ;)
    Bingo, 2 Novembre 2006
    #14
  15. Offline
    II phl II Touriste
    tiens ... ça correspond à quoi le client MySQL: 5.0.18
    je pensais que c'était la version MySQL moi :-'
    II phl II, 2 Novembre 2006
    #15
  16. Offline
    k o D Belge !
    idem
    k o D, 2 Novembre 2006
    #16
  17. Offline
    Bingo Beer Addict
    C'est la version du client. Si tu te connectes en ligne de commande, tu utilises un client :
    C:\>mysql.exe -Uroot -ppass -h monserveur.ovh.com -d maDB
    Ici, mysql.exe est le client.

    Si tu as installé mysql 5.0.18 en local, tu utilises le client qui est installé avec mysql 5.0.18.

    MySQL c'est un DB client/serveur (pas comme Access par exemple). Tu te connectes à un serveur avec un client. En ligne de commande, le client c'est l'exécutable que tu utilises, si tu es en PHP c'est la version de l'API Client utilisée pour compiler ton PHP (je pense que c'est 4.1.xx avec les packages PHP classiques).
    Bingo, 2 Novembre 2006
    #17
  18. Offline
    II phl II Touriste
    ok merci

    et comment puis-je savoir la version MySQL présente sur un server alors ?
    qd je fais un phpinfo(); je n'ai que la version du client :-s
    II phl II, 2 Novembre 2006
    #18
  19. Offline
    grosnours ex membre
    SELECT version();

    Edit:
    En principe, si le serveur mysql tourne sur la même machine que le serveur web, la version du client fournie par phpinfo est la même que celle du serveur mysql.
    grosnours, 2 Novembre 2006
    #19
  20. Offline
    II phl II Touriste
    4.1.9-max (en local)
    4.0.25-standard-log (OVH)

    merchi ;)
    II phl II, 2 Novembre 2006
    #20
Statut de la discussion:
Fermée.