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 :

SELECT en ordre ascendant


Sujet :

Requêtes MySQL

Vue hybride

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut SELECT en ordre ascendant
    Bonjour,

    voici une requête qui fonctionne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT us.sesa FROM user_table us JOIN application ap ON ap.id_user = us.id_user JOIN ticket ti ON ti.id_application = ap.id_application  group by us.sesa
    et la même en ajoutant order by us.sesa ASC à la fin :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT us.sesa FROM user_table us JOIN application ap ON ap.id_user = us.id_user JOIN ticket ti ON ti.id_application = ap.id_application  group by us.sesa order by us.sesa ASC
    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 'asc LIMIT 0, 1000' at line 1
    Pourquoi ? A mon avis, pas besoin de donner le DDL des tables.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    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 633
    Billets dans le blog
    10
    Par défaut
    Bonjour LaurentSc

    Le message d'erreur mentionne un problème de syntaxe près de la clause LIMITqui n'apparaît pas dans la requête publiée
    Merci de publier la requête exacte et complète qui produit le message d'erreur.

    Note :
    • faire deux jointures alors que la seule colonne récupérée est dans la table user_table n'a d'intérêt que si on ne veut récupérer la colonne SESA que si le user est trouvé dans les deux autres tables. Est-ce bien le cas ? Sinon lire la table user_table suffit et en ce cas il n'y a peut-être plus besoin de regrouper si la valeur SESA est unique.
    • comme il n'y a aucun calcul d'agrégat (pas de SUM, VAR, MAX, COUNT...), si le but est de dédoublonner, il faut utiliser DISTINCTplutôt que GROUP BY

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Oui, en effet le message d'erreur mentionne une clause LIMIT mais cependant, la requête donnée au post #1 est exactement celle qui provoquait ce message...Cela dit, je viens de refaire l'essai (exactement la même requête) et y a plus d'erreur ! Va comprendre Charles...

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    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 633
    Billets dans le blog
    10
    Par défaut
    Reste les interrogations sur l'utilité des jointures et surtout, sur la clause GROUP BY.

    Qu'en est il ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    S'il s'agit de retourner uniquement des informations provenant de la table user_table, la requête suivante sera plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  us.sesa 
    FROM    user_table us 
    WHERE   EXISTS
            (   SELECT  1
                FROM    application ap 
                    JOIN    
                        ticket      ti 
                        ON ti.id_application = ap.id_application  
                WHERE   ap.id_user = us.id_user 
            )
    ORDER BY us.sesa ASC
    ;
    L'utilisation de sauts de ligne et d'indentations dans l'écriture d'une requête rend celle-ci plus lisible et par conséquent plus facile à maintenir et faire évoluer.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Désolé de ne répondre que maintenant.

    Citation Envoyé par escartefigue Voir le message
    faire deux jointures alors que la seule colonne récupérée est dans la table user_table n'a d'intérêt que si on ne veut récupérer la colonne SESA que si le user est trouvé dans les deux autres tables. Est-ce bien le cas ? Sinon lire la table user_table suffit et en ce cas il n'y a peut-être plus besoin de regrouper si la valeur SESA est unique.
    L'intérêt de faire 2 jointures, c'est que les 3 tables sont reliées par des clés étrangères. Je suis incapable de produire un schéma textuel, mais le schéma graphique est celui du post #18 de cette discussion : https://www.developpez.net/forums/d2...-d-entite-mcd/. Les 3 tables sont ticket, application et user_table.
    Les règles de gestion sont :
    - un ticket concerne une application (association concern_t)
    - une application est gérée par un utilisateur (association manage_app)
    C'est la liste des utilisateurs cités dans la 2e règle que l'on veut lister.

    Citation Envoyé par escartefigue Voir le message
    comme il n'y a aucun calcul d'agrégat (pas de SUM, VAR, MAX, COUNT...), si le but est de dédoublonner, il faut utiliser DISTINCTplutôt que GROUP BY
    Merci pour cette remarque.

    Citation Envoyé par al1_24 Voir le message
    L'utilisation de sauts de ligne et d'indentations dans l'écriture d'une requête rend celle-ci plus lisible et par conséquent plus facile à maintenir et faire évoluer.
    Votre requête convient mais même si elle est plus lisible que la mienne, je ne la comprend pas. Pouvez-vous ajouter des commentaires ?
    Ma requête plus lisible :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT us.sesa  
     
    FROM user_table us 
     
        JOIN application ap ON ap.id_user = us.id_user 
     
        JOIN ticket ti ON ti.id_application = ap.id_application  
     
    order by us.sesa ASC

  7. #7
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Oui, en effet le message d'erreur mentionne une clause LIMIT mais cependant, la requête donnée au post #1 est exactement celle qui provoquait ce message...:
    Il me semble que la clause LIMIT 0, 1000 est insérée par votre client (phpmyadmin, ...) à des fins de pagination. De telles erreurs surviennent quand on oublie un point virgule par exemple à la fin de la requête.

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

Discussions similaires

  1. Ordonner les élements d'un select par ordre alphabétique
    Par islyoung2 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/03/2010, 11h07
  2. select par ordre d'entrée d'un tableau
    Par akara dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/08/2007, 16h00
  3. selection dans un certain ordre
    Par kenny49 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/06/2006, 10h57
  4. Oracle 8i :Ordre Select dans la création de vue
    Par madina dans le forum Oracle
    Réponses: 2
    Dernier message: 05/06/2006, 12h24
  5. [débutant] 1 ordre select sur une OU plusieurs tables
    Par goony dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/08/2005, 10h57

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