Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 16h27   #1
Invité de passage
 
Cédric Merle
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Cédric Merle

Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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 :

Citation:
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 :
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
Lowbaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 23h08   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 23h45   #3
Invité de passage
 
Cédric Merle
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Cédric Merle

Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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.
Lowbaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 00h04   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Pourquoi vouloir compter le nombre de lignes alors que tu sais que ça peut au maximum t'en retourner une seule ?

Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 00h37   #5
Invité de passage
 
Cédric Merle
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Cédric Merle

Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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...
Lowbaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 00h41   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Si tu veux vérifier que l'id existe, fais simplement cette requête :
Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 04h02   #7
Invité de passage
 
Cédric Merle
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Cédric Merle

Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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...
Lowbaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 04h09   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 13h22   #9
Invité de passage
 
Cédric Merle
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Cédric Merle

Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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.
Lowbaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web