Action>Personnalisable avec ROLLUP ne fonctionnet plus depuis la V801

Bonjour

Les Action>Personnalisable avec ROLLUP ne fonctionnent plus depuis la V801. 
La présence de "ROLLUP" produit un résultat vide et  l'erreur "Incorrect usage of CUBE/ROLLUP and ORDER BY"

Par exemple : cette requette marche très bien avec les versions de pmb antérieure à la V8 
SELECT libelle AS Catégorie
      ,COUNT(id_empr) AS 'Nombre lecteurs' 
FROM empr 
     LEFT JOIN empr_categ ON id_categ_empr=empr_categ 
WHERE  CURDATE() <= empr_date_expiration
GROUP BY 1 WITH ROLLUP;

Donne :
Catégorie     Nombre lecteur

Dans "Supervision > Hist. de logs" on trouve :



Noter l'ajout automatique de "order by catégorie asc" qui est la cause du message.

Comment faire pour ne pas avoir cet ajout ?

Mercie d'avance de votre réponse

Jean-Luc

Pour info avant la V8 la requette donne :
Catégorie     Nombre lecteur
Adultes     88
Collectivités     15
Jeunes     17
Petits     16
NULL     136




Réponses

  • Bonjour,

    Votre version de mysql est peut-etre ancienne. Cet ajout de "Order by" avec ROLLUP ne serait ok qu'en MySQL8 .0.12 et plus.

    Mais à défaut, vous pouvez réécrire votre requête 

    SELECT *
    FROM (
    SELECT libelle AS Catégorie
          ,COUNT(id_empr) AS 'Nombre lecteurs' 
    FROM empr 
         LEFT JOIN empr_categ ON id_categ_empr=empr_categ 
    WHERE  CURDATE() <= empr_date_expiration
    GROUP BY 1 WITH ROLLUP) t1

    L'ajout automatique du Order by devrait passer .

  • Bonjour 

    Merci de votre réponse 

    Ma version de sql est
    11.1.2-MariaDB-1:11.1.2+maria~deb12 est-ce équivalent à  MySQL8 .0.12 ?

    Votre solution est simple et marche bien 
    Un petit inconvénient : la ligne NULL (le total) est la première. Dans le cas de sous totaux  je ne vois pas trop comment faire quelque chose de lisible.


    L'idéale serait de supprimer ou au moins contrôler l'ajout du Order By
  • Bonjour Jean-Luc,

    Je n'ai pas vu de paramètre pouvant éviter le order by par défaut. Je ne sais pas si une autre solution existe.

    Pour inverser la classification, vous pouvez ajouter vous-même un Order by ... DESC , le compilateur devrait ne pas ajouter le sien.

    Donc  ceci :
    SELECT *
    FROM (
    SELECT libelle AS Catégorie
          ,COUNT(id_empr) AS 'Nombre lecteurs' 
    FROM empr 
         LEFT JOIN empr_categ ON id_categ_empr=empr_categ 
    WHERE  CURDATE() <= empr_date_expiration
    GROUP BY 1 WITH ROLLUP) t1
    ORDER BY Catégorie DESC



     Sinon, il n'y a pas de comparaison facile de Mariadb et Mysql. 
     Mais, la doc actuelle de MariaDb semble dire que ROLLUP et ORDER BY reste encore incompatible.
    => WITH ROLLUP cannot be used with ORDER BY. ...

  • Bonjour Michel

    Merci pour cette réponse astucieuse.
    Je vais m'essayer dans le cas d'un ROLL UP sur 2 champs (Catégorie de lecteur et Classe d'age)

    L'ajout de cet ORDER BY est apparue avec la version 8. 

    Si un développeurs de PMB lis ce message : est-il possible de savoir la raison de cet ajout, est-il envisageable de le rendre facultatif ?

    Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.