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 :

Problème requête MySql en fonction du serveur


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Problème requête MySql en fonction du serveur
    Bonjour à tous,

    Comme tout le monde je suppose, je développe mon site en local. Pour ma part, j'utilise Wamp 2.0. Donc pour ce qui est du développement, pas de soucis. Seulement voilà, lorsque je veut mettre mon site en production sur mon serveur Linux, je me retrouve avec des erreurs MySql :

    SQLSTATE[42000]: Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
    La requête provoquant cette erreur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS `nbs`, `nom` 
    FROM `site_team` 
    WHERE `id` = :team;
    Mais ce n'est pas la seul car toute les requêtes de ce type provoque la même erreur. J'en conclus que c'est parce que je n'est pas mis de clause GROUP BY. Certes, seulement, je n'ai pas envi de me retaper toutes mes requêtes sql parce qu'il n'y a pas que celle-ci...
    De plus, sur un autre serveur que j'ai installé pour les besoins de mon entreprises, ce genre de requêtes tourne parfaitement o_O Ce qui me laisse alors à penser que le problème viens d'une configuration, ou d'une version du serveur MySql...

    J'aimerai donc configurer mon serveur afin qu'il accepte ces requêtes (enfin si c'est possible). Mais je ne sais pas comment faire.
    Pour informations supplémentaire, mon serveur est un ubuntu 8.04.4 LTS, le serveur MySql est en version 5.0.51a-3ubuntu5.8, et pour la connexion à la BDD, j'utilise PDO.

    Voilà, merci d'avance

  2. #2
    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
    MySQL a raison de râler ! Comme tu as une colonne + une fonction de regroupement dans le SELECT, il te faut un GROUP BY sinon ta requête n'a pas de sens !

    Il vaut mieux que tu écrives tes requête correctement plutôt que de vouloir triturer la configuration de MySQL pour qu'il accepte une mauvaise requête. En fait, il n'aurait déjà pas dû l'accepter dans la phase de développement.

    Dans la requête que tu présentes, que représente le nom par rapport à l'id ?
    Autrement dit, peut-il y avoir plusieurs noms pour un id ou cette requête n'est-elle sensée retourner qu'une seule ligne de résultat ?
    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 !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui je sais que cette requête n'est pas extrêmement correcte... Mais si je fais ça c'est pour économiser des ressources. Le but est simple : vérifier qu'une ligne existe (avec le count sur l'id) et si c'est le cas, récupérer le nom.
    Étant donné que c'est un id il est soit censé exister, soit pas, je n'aurais qu'une seul ligne de renvoyer... Et cette ligne me dira si ce que je cherche existe ou pas.
    Si ça existe, ça me renvoi le nom, sinon ça me renvoi null... :/ ça évite de faire une deuxième requête par derrière. Après oui je peut mettre un GROUP BY, c'est certain... Mais ce qui m'étonne c'est qu'un serveur me l'accepte, et pas l'autre... Et comme pour le moment j'ai pas le temps de refaire tout mes scripts pour refaire toute les requêtes qui ont ce style (il y en a pas mal)... J'aimerai pouvoir modifier la config MySql pour qu'il les accepte.

  4. #4
    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
    Pourquoi vouloir compter le nombre de lignes alors que tu sais que ça peut au maximum t'en retourner une seule ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom
    FROM site_team
    WHERE id = :team
    Soit l'id existe et tu as directement le nom.
    Soit il n'existe pas et la requête ne retourne aucune ligne de résultat.

    Dans ton programme PHP, il te suffit de vérifier si $result['nom'] != ''

    Tu veux économiser des ressources mais tu demandes à MySQL un calcul inutile ! Bizarre comme notion de l'économie !
    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 !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Pour être sûre que c'est valide... Si on image que le nom peut être vide, ta solution ne tiens plus... Et pour le petit calcule que ça demande à MySql, je pense qu'il est négligeable ^^
    Mais j'en conviens parfaitement, ma technique n'est pas parfaite...
    Mais je ne vais pas non plus commencer à recoder ton mon site, déjà bien avancé pour si peut. Du moins j'aimerai éviter en tout cas :/ Et c'est pour ça que j'aimerai trouver une solution à ce problème...

  6. #6
    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
    Si tu veux vérifier que l'id existe, fais simplement cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, nom
    FROM site_team
    WHERE id = :team
    Mais bon si tu préfères le code sale, c'est ton problème !
    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 !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai pas dit que j'étais contre tout conseil. Ta manière est aussi très bien. Après mon code n'est pas plus salle que ça. Mais bref, on s'éloigne du sujet....

    J'aimerai simplement savoir comment modifier MySql pour qu'il accepte la requête. Sa me permettra d'en apprendre au passage un peu plus sur le sujet...

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Franchement je ne peux qu'appuyer cinephil, pour moi aussi il faut modifier toutes les reqêtes incriminées.
    Mais pour répondre à ta question, une piste semble être ONLY_FULL_GROUP_BY
    Compare tes 2 my.cnf, celui de wamp et celui de ta prod.

    A lire absolument autour de MySql et du GROUP BY

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui je compte bien les changer. Mais l'à, j'ai besoin de mettre en ligne une version de test. Donc il faut que ça marche. Ensuite, je règlerai ces problèmes.
    Merci pour tes liens. Je vais regarder.

Discussions similaires

  1. Exécuter une requête MySQL en php sur serveur OVH
    Par phebus1204 dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/04/2009, 16h41
  2. [MySQL] dbconnect, requête mysql et fonction 2en1 ?
    Par hideto dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/12/2008, 17h32
  3. [MySQL] Problème requête Mysql
    Par jbtz64 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/05/2008, 14h08
  4. Problème requête MySQL
    Par low-ik dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/03/2007, 16h04
  5. Problème requête MySql & builder
    Par boopix dans le forum C++Builder
    Réponses: 19
    Dernier message: 09/03/2007, 02h04

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