IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

problème requetes avec not in


Sujet :

MySQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Full Stack
    Inscrit en
    Mai 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Mai 2010
    Messages : 159
    Par défaut problème requetes avec not in
    Bonjour à tous,

    Voilà depuis aujourd'hui j'ai un souci avec mysql 5.5.44. J'ai un script qui fonctionne avec cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a.* FROM sf_membre AS a LEFT JOIN sf_user AS b ON b.id = a.user_id WHERE a.user_id NOT IN (SELECT user_id FROM sf_livraison WHERE startday = '2015-11-09' AND endtime < '15:59') AND b.user_group_id = 4 AND b.actif = 1
    J'avais des sorties mais surtout celles dont j'avais besoin.
    Maintenant je n'ai plus rien et quand je passe la requête dans phpmyadmin j'ai une erreur et comme réponse j'ai : NOT n'est pas reconnu comme mot clé.

    Avez-vous une idée?


    Franck

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Ré-écrivez votre requête comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT mb.* 
    FROM sf_membre AS mb
    LEFT JOIN sf_user AS us 
      ON us.id = mb.user_id 
    WHERE us.user_group_id = 4 
      AND us.actif = 1
      AND NOT EXISTS
         (select 1 from sf_livraison as li
          where li.user_id = mb.user_id 
            and li.startday = '2015-11-09' 
            and li.endtime < '15:59')
    Un test d'existence doit être fait par un EXISTS et non par not in
    J'ai laissé le select *, mais vous devriez le remplacer par les colonnes UTILES
    J'ai aussi remplacé les alias par des alias plus parlants, dès qu'on a plus de 2 tables, a, b, c etc... ce n'est pas clair
    Et enfin, une requête formatée c'est tellement plus facile à lire

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut franck31.

    Je ne reviendrais pas sur les excellents points de Escartefigue.
    En effet, la solution n'est pas de faire un 'not in' mais plutôt un 'exists'.

    Citation Envoyé par franck31
    Maintenant je n'ai plus rien et quand je passe la requête dans phpmyadmin j'ai une erreur
    Je suppose que votre requête, jusqu'à présent, fonctionnait correctement. Et du jour au lendemain, elle ne fonctionne plus du tout.
    MySql a besoin de stocker la liste de tous vos users (le 'not in'), et de ce fait, il atteint la limite de stockage dans une table temporaire interne.

    Vous devez modifiez les variables 'tmp-table-size' et 'max_heap_table_size', du fichier 'my.ini', en les augmentant et en mettant la même valeur.
    Je suppose que la valeur est de '16M'. Passez là à '64M'.

    https://dev.mysql.com/doc/refman/5.7...tmp_table_size
    https://dev.mysql.com/doc/refman/5.7...eap_table_size

    N'oubliez pas de redémarrer votre serveur MySql après cette modification.

    @+

Discussions similaires

  1. Problème requete avec into dans trigger
    Par Neji44 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/06/2007, 16h06
  2. [MySQL] Requete avec NOT IN
    Par ChrisMan dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/05/2007, 11h16
  3. Problème Requete avec MAX()
    Par kro001 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/04/2007, 08h54
  4. [MySQL] Problème requete avec un count
    Par kornmuse90 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/03/2006, 08h56
  5. Requete avec NOT IN
    Par Bibicmoi dans le forum Requêtes
    Réponses: 9
    Dernier message: 12/09/2005, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo