+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité régulier
    Inscrit en
    mai 2011
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : mai 2011
    Messages : 37
    Points : 7
    Points
    7

    Par défaut Desactiver ONLY_FULL_GROUP_BY mysql

    Bonjour à tous,
    je viens d'acheter un script de chat avec webcam, que j'essaye de faire fonctionner sur un serveur dédié OVh sous Release 2.
    Le site fonctionne sauf une page qui est supposait afficher les membres en ligne.
    Voici l'erreur:

    A Database Error Occurred

    Error Number: 1140

    Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

    Code :
    SELECT `performers`.`nickname`, `performers_videos`.*, count(distinct(performers_videos.video_id)) as total FROM `performers_videos` INNER JOIN `performers` ON `performers`.`id`=`performers_videos`.`performer_id` WHERE (SELECT COUNT(performer_id) FROM `banned_countries` WHERE `banned_countries`.`performer_id` = `performers_videos`.`performer_id` AND `banned_countries`.`country_code` = 'FR') = 0
    Les techs du script me demandent de passer en mysql 5.5, actuellement je suis en 5.0.44. Pour le moment étant difficile de mettre à jour mysql sur la release 2 d'ovh, je me demandais s'il était plus simplement possible de désactiver le ONLY_FULL_GROUP_BY mode ?

    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
    14 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 : 14 008
    Points : 25 262
    Points
    25 262

    Par défaut

    Quelle horreur cette requête ! Celui qui a pondu ce script devrait apprendre le SQL !

    Elle est censée faire quoi cette requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    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 la suite Linux Mageïa !

  3. #3
    Invité régulier
    Inscrit en
    mai 2011
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : mai 2011
    Messages : 37
    Points : 7
    Points
    7

    Par défaut

    C'est une page qui doit afficher les membres en lignes ...

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    juin 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juin 2011
    Messages : 442
    Points : 612
    Points
    612

    Par défaut

    Pour avoir les options actuelles :
    Puis tu fais (Sans le ONLY_FULL_GROUP_BY):

  5. #5
    Invité régulier
    Inscrit en
    mai 2011
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : mai 2011
    Messages : 37
    Points : 7
    Points
    7

    Par défaut

    merci pour vos réponse
    j'ai décidé de réinstaller un debian tout neuf avec les paquets nécessaires.
    Je mettrai mysql 5.5

    Merci encore

  6. #6
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 : 14 008
    Points : 25 262
    Points
    25 262

    Par défaut

    Je ne vois pas de condition dans la requête qui détermine si un membre est en ligne ou pas ! Ce n'est probablement pas la seule requête du script qui génère la page.

    À moins que ce soit le fait qu'il figure dans la table "performers_videos" ?

    D'ailleurs, on nomme de préférence les tables au singulier mais c'est un autre débat.

    Apparemment, cette requête compte le nombre de vidéos de chaque performer et donne la liste de ces vidéos. Par contre, je ne comprends pas l'utilité du WHERE. D'après le nom de la table, il semble s'agir d'exclure du résultat les membres bannis ? Pourquoi limiter à la France ? Et il faudrait plutôt une condition NOT EXISTS que ce comptage en sous-requête corrélée qui va très vite plomber les ressources et augmenter le temps de réponse.

    La partie qui pose problème et qui cause ce message d'erreur, c'est `performers_videos`.* dans le SELECT. Au passage, il vaut mieux éviter la guerre des étoiles !

    Donc si j'ai bien compris le sens de la requête, ça devrait plutôt être ceci :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT tmp.nickname, tmp.total,
    	pv1. -- les colonne nécessaires et pas étoile !
    FROM performers_videos pv1
    INNER JOIN
    (
    	SELECT p.id, p.nickname,
    		COUNT(DISTINCT pv.video_id) AS total
    	FROM performers_videos pv
    	INNER JOIN performers p ON p.id = pv.performer_id
    	WHERE NOT EXISTS
    	(
    		SELECT 1
    		FROM banned_countries b
    		WHERE b.performer_id = pv.performer_id
    			AND b.country_code = 'FR'
    	)
    	GROUP BY p.id, p.nickname
    ) tmp
    	ON tmp.id = pv1.performer_id
    La sous requête compte les vidéo des performers qui n'existent pas dans la table banned_countries pour la France et la requête principale récupère les autres colonnes de la table performers_videos pour ces performers.


    Pour répondre à votre question initiale, c'est une bonne chose que ce paramètre soit actif car ça permet de détecter les requêtes foireuses de ce genre et qui peuvent donner des résultats faux si ce filtre n'est pas activé.

    J'espère que vous n'avez pas payé trop cher votre script et que le reste n'est pas aussi pourri que cette requête !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    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 la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •