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 :

Clause LIMIT non acceptée sur GROUP_CONCAT


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut Clause LIMIT non acceptée sur GROUP_CONCAT
    Bonjour,

    j'ai une requête qui fonctionne chez mon interlocuteur mais pas chez moi. La requête est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
        aca.titre,
        aca.description,
        GROUP_CONCAT(img.lien LIMIT 1) AS lien
    FROM actifsaero AS aca
    LEFT JOIN images AS img
           ON img.idimages = aca.idaero
    WHERE aca.id = ?
    GROUP BY aca.id, aca.titre, aca.description

    Cette requête, exécutée dans MysqlWorkbench 8.0 donne une erreur SQL :
    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1) AS lien FROM actifsaero AS aca LEFT JOIN images AS img ON img.id' at line 4
    Alors que la requête sans la clause LIMIT :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
        aca.titre,
        aca.description,
        GROUP_CONCAT(img.lien) AS lien
    FROM actifsaero AS aca
    LEFT JOIN images AS img
           ON img.idimages = aca.idaero
    WHERE aca.id = ?;
    GROUP BY aca.id, aca.titre, aca.description
    fonctionne. Pourtant, la première requête fonctionne pour mon interlocuteur, avec phpMyAdmin. Quelle peut être la raison SVP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    La première chose que je vérifierai est la version de MySql utilisée.

    Accessoirement si je regarde l'aide en ligne de MySQL 8.0, je ne trouve pas de LIMIT pour GROUP_CONCAT()…
    Du coup je ne comprends pas que la requête soit acceptée.

    Tatayo.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je me suis tourné directement vers l'interlocuteur : https://www.developpez.net/forums/d2.../#post11842457, post 59.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    bonjour,

    En même temps, quel est l'intérêt ? Si le but est de ne conserver qu'une seule occurrence, il n'y a rien à concaténer !

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    ce code est en fait de quelqu'un d'autre (cf https://www.developpez.net/forums/d2...age-image-bdd/) et j'essayais de résoudre un problème, qu'il a pu résoudre avec cette requête...Sa solution ne fonctionnant pas chez moi, j'ai cherché à comprendre. Cela dit, pour bien comprendre, il faut connaître le PHP et je sais que ce n'est pas votre cas, donc pour éclaircir ce truc, je vais clore cette discussion et en créer une ici : https://www.developpez.net/forums/f2...-base-donnees/.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Cela dit, pour bien comprendre, il faut connaître le PHP
    L'erreur est dans MySql pas dans Php.

    En premier lieu, la clause "limit" sert à l'affichage dans un select.
    Comme son nom l'indique, il sert à limiter le nombre de lignes en sortie.

    Je reprends ta requête que voici :
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT     aca.titre,
               aca.description,
               GROUP_CONCAT(img.lien LIMIT 1) AS lien
         FROM  actifsaero AS aca
    LEFT JOIN  images AS img
           ON  img.idimages = aca.idaero
        WHERE  aca.id = ?
     GROUP BY  aca.id, aca.titre, aca.description

    Si je comprends la requête, il y a plusieurs lignes qui sont produites.
    La cause provient certainement de la jointure.

    La requête effectue un regroupement sur les trois première colonnes et l'on désire récupérer la valeur de la quatrième.
    Sauf que celle-ci peut avoir plusieurs valeurs différentes (en théorie car je ne connais pas ce qui a été fait).
    Et là, on désire en récupérer une seule.

    En second lieu, la solution de procéder par la clause "limit" est absurde.
    Il existe une solution fort simple pour récupérer une valeur dans un "group by".
    Il suffit de mettre :
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    ANY_VALUE(img.lien) as lien
    Il va te donner, comme le nom de la fonction l'indique, n'importe quelle valeur de la colonne "img.lien".
    Plus précisément, une et une seule valeur dans le cas où il en existe plusieurs, même si elles sont différentes entre elles.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/05/2018, 14h38
  2. Sitemap non accepté sur les outils google en HTTPS
    Par Invité dans le forum Référencement
    Réponses: 2
    Dernier message: 04/11/2016, 16h40
  3. droits sur la clause de non concurrence
    Par mumu1403 dans le forum Contrat
    Réponses: 6
    Dernier message: 21/09/2008, 14h54
  4. Réponses: 3
    Dernier message: 13/02/2008, 10h10
  5. Creation Procedure : erreur sur une clause LIMIT
    Par breuil dans le forum SQL Procédural
    Réponses: 14
    Dernier message: 27/08/2007, 23h44

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