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

Requêtes MySQL Discussion :

Requête complexe qui marchais avant et ne fonctionne plus


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Points : 45
    Points
    45
    Par défaut Requête complexe qui marchais avant et ne fonctionne plus
    Bonjour, voici ma table :

    id nom type ed
    1 A int 1
    2 B cov 1
    3 C maq 1
    4 D int 2
    5 E maq 2

    J'ai la colonne type qui est un varchar et dont les possibilités sont int, cov et maq.

    Je cherche le nom de chacun des types dont l'éd est la plus grande.
    Pour le int : j'affiche le nom D car entre A et D c'est l'ed max qui remporte.
    Pour le cov : j'affiche B
    Pour le maq : j'affiche E car entre C et E c'est l'ed max qui remporte

    La requête qui suit fonctionnait jusqu'à aujourd'hui parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id, nom, type, ed FROM folder AS f1 WHERE type="int"  AND EXISTS (SELECT 1 FROM folder AS f2 WHERE f1.type=f2.type HAVING f1.ed = MAX(f2.ed))
    Aujourd'hui cela ne fonctionne plus pour le type "int". Si dans cette requete, je mets type="cov". Aucun soucis. De même si je renomme tous les types "int" en "tin". Aucun soucis
    La solution est donc trouvé. Remplacer les "int" en "tin".

    Le problème, je pense viens du f1.type=f2.type qui doit le traduire en int=int sans guillemet et donc l'interprète.

    Ma grande question est pourquoi cela marchait avant ? Une mise à jour automatique du phpmyadmin ? Un mystère de l'informatique ?

    Merci de votre aide!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Une chaîne de caractère est encadrée par de simple cotes.
    Ca vient peut être de là, essayez ceci :

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Un HAVING sans GROUP BY n'a pas beaucoup de sens !

    Ceci devrait donner de meilleurs résultats.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.type, f.nom, t.ed_maxi AS ed
    FROM folder AS f
    INNER JOIN (
      SELECT type, MAX(ed) AS ed_maxi
      FROM folder
      GROUP BY type
    ) AS t ON t.type = f.type
        AND f1.ed = t.ed_maxi
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 69
    Points : 45
    Points
    45
    Par défaut
    Et non cela change rien. D'ailleurs, je n'ai pas de solution. Le remplacement de 'int' par 'tin' ne fonctionne pas. De même qu'un ID...

    Je craque!

    J'ai fais un test dans une nouvelle base, quand j'exporte mes données entièrement et les ré-importe dans la nouvelle même soucis.
    Par contre, si je n'importe que 12 ligne. La ca fonctionne, avec int.

    Pensez-vous que mon problème vienne du fait que j'ai trop de donnée (2146)?

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    On va commencer par exclure ça tout de suite :

    Citation Envoyé par omman95 Voir le message
    Pensez-vous que mon problème vienne du fait que j'ai trop de donnée (2146)?
    Bien sûr que non !
    MySQL est capable de traiter des dizaines de millions de données.

    Le reste est bizarre !
    J'ai la colonne type qui est un varchar et dont les possibilités sont int, cov et maq.
    Déjà si tes trois possibilités ne font que trois caractères, tu pourrais transformer la colonne en type CHAR.
    Et si tu n'as que trois possibilités, en MYSQL tu peux aussi utiliser le type ENUM.

    Je cherche le nom de chacun des types dont l'éd est la plus grande.
    Il me semble que ma requête devrait répondre à ton besoin.

    C'est vrai que 'int' est un mot interprétable par MySQL puisque c'est une manière d'écrire le type entier pour une colonne mais dans la mesure où il s'agit ici d'une valeur de donnée, ça ne devrait pas être interprété par MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Requête hibernate qui ne fonctionne pas
    Par sheura dans le forum Hibernate
    Réponses: 4
    Dernier message: 28/09/2007, 16h20
  2. Requête DELETE qui refuse de fonctionner chez Free
    Par fafafa dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/06/2006, 15h00
  3. requête match qui ne fonctionne pas.
    Par sam01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/05/2006, 20h28
  4. [MySQL] Requête update qui ne fonctionne pas
    Par Sylvain245 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/12/2005, 16h40
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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