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

Langage SQL Discussion :

[SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Hello tlm!

    Je suis sur MySQL.
    en fait, j ai une requete qui marche comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT count( vote.id ) AS nbVote, sujet, dateMAJ, url
    FROM forumf
    INNER JOIN vote ON forumf.id = vote.id_forumf
    GROUP BY vote.id
    mais qui marche pas quand je fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count( vote.id ) AS nbVote, sujet, dateMAJ, url
    FROM forumf
    INNER JOIN vote ON forumf.id = vote.id_forumf
    ORDER BY  count( vote.id ) ASC
    GROUP BY vote.id
    j'ai alors une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #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 'GROUP BY vote.id LIMIT 0, 30' at line 5

    merci d'avance les petit loup ! :-p

  2. #2
    Membre habitué Avatar de Cobaye
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 154
    Points
    154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count( vote.id ) AS nbVote, sujet, dateMAJ, url 
    FROM forumf 
    INNER JOIN vote ON forumf.id = vote.id_forumf 
    GROUP BY sujet, dateMAJ, url
    ORDER BY  count( vote.id ) ASC
    Je ferai ca mais pas sur que le ORDER BY fonctionne
    Pro : http://www.ohweb.fr -> Spécialiste en développement de site e-commerce, Expert Prestashop
    perso : http://www.olecorre.com -> un dico de termes informatiques


    J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

  3. #3
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Peut-être qu'une sous-requête est nécessaire

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    en fait, j ai une requete qui marche comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT count( vote.id ) AS nbVote, sujet, dateMAJ, url 
    FROM forumf 
    INNER JOIN vote ON forumf.id = vote.id_forumf 
    GROUP BY vote.id
    Ta requête ne devrait pas fonctionner ou alors tu t'es trompé dans ton copier-coller car dans ta clause GROUP BY il doit figurer tous les champs de ton SELECT (cf la requete de Cobaye). Vérifie ta requête ou alors ton message

    D'autre part si le ORDER BY proposé par Cabaye ne fonctionne pas (il devrait), tu peux essayer :
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Sous Oracle, tous les champs ne doivent pas figurer... Il me semble.
    Par contre, sous SQL Server, ils doivent tous être dans le GROUP BY.

  6. #6
    Membre habitué Avatar de Cobaye
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 154
    Points
    154
    Par défaut
    il est préconisé de mettre les champs sinon on peut avoir des surprises
    Pro : http://www.ohweb.fr -> Spécialiste en développement de site e-commerce, Expert Prestashop
    perso : http://www.olecorre.com -> un dico de termes informatiques


    J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut
    Cobaye :> j'ai essayer ta requete et elle me retroune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1111 - Invalid use of group function
    et Magnus, je confirme que cette requete fonctionne.

    Je pense je vais faire comme BiMouXette à dit, avec deux requêtes...

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count( *) AS nbVote, sujet, dateMAJ, url 
    FROM forumf 
    INNER JOIN vote ON forumf.id = vote.id_forumf 
    GROUP BY sujet, dateMAJ, url 
    ORDER BY  count( * ) ASC
    Comme tu as fait un INNER JOIN vote.id ne peut pas être NULL (donc le résultat sera le même), et il est possible que mySQL ne sache pas utiliser COUNT(vote.id), cf. le message d'erreur.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    et Magnus, je confirme que cette requete fonctionne
    Je ne dis pas que çà ne doit pas marcher mais cette syntaxe est à proscrire car elle ne correspond pas à la norme SQL (les autres me corrigeront si je me trompe).

    D'autre part, BiMouXette ne te conseille pas de faire 2 requêtes d'après ce que j'ai compris mais de faire une sous-requête (ton SGBD supporte cette possibilité à partir de la version 4.1)
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

Discussions similaires

  1. [Criteria] Difficultés avec jointures GROUP BY et ORDER BY
    Par DaizDev dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/03/2013, 22h10
  2. Count sql qui marche pas.
    Par thebarbarius dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2012, 21h04
  3. [SQL] Script PHP qui marche pas !
    Par Diabless6 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/02/2007, 16h28
  4. [MySQL] Order by qui marche pas, Que faire ?
    Par mulbek dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 06/01/2006, 14h48
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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