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 :

Classé par ordre alphabétique à partir d'une lettre donné


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut Classé par ordre alphabétique à partir d'une lettre donné
    bonjour,

    je cherche a effectuer une requête qui va me classé les différents entreprises de ma bdd par ordre alphabétique mais à partir d'une lettre tiré préalablement aléatoirement. et par adhésion à une organisation.



    Par exemple dans ma table j'ai:

    Entreprise adhésion
    1 pour adhérer et 0 pour non adhérent.

    tttttttttttt 1
    oooooooooo 0
    nnnnnnn 0
    fffffff 1
    aaaaaaa 1
    xxxxxx 1
    mmmmmm 0


    PAr exemple la lettre générée aléatoirement est: M la requete doit donc m'afficher :

    tttttttttttt
    xxxxxx
    aaaaaaa
    fffffff
    mmmmmm
    nnnnnnn
    oooooooooo

    elle classe d'abord les adhérent en commencent par la lettre générée puis les non adhérent par ordre alpha à partir de A

    J'espère avoir été assez clair

    Donc je cherche de l'aide, des pistes etc pas la réponse s'il vous plaît

    merci d'avance,

    julien

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 128
    Points
    128
    Par défaut En Oracle ...
    En Oracle, ça fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select entreprise
    from maTable
    order by adhesion desc, decode(upper(substr(entreprise,1,1)) >'M',0,1);
    Le upper c'est au cas où ta lettre tirée au hasard est en majuscule ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    tu peux m'expliquer un peu la requête stp. Ce qui suit deco( ...) >...


    j'utilise mysql/sql

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    DECODE est spécifique à Oracle.
    Le langage SQL normalisé propose CASE ... WHEN.

    Pour t'aider dans ta requête :
    ORDER BY accepte des expressions comme critères de tri
    Tu dois donc trier d'abord sur un identifiant de liste (adhérent ET après la lettre, puis adhérent ET avant la lettre, puis non adhérent) puis sur le nom d'adhérent.
    A toi la suite...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    ah voila ce que j'attendais merci à toi pour ces explications très claires.

    je regarde ca !!!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Points : 128
    Points
    128
    Par défaut En mysql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select entreprise
    from maTable
    order by adhesion desc, case upper(substring(entreprise,1,1) when >'M'THEN 0 ELSE 1 END;

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    roooh moi qui voulait chercher mdr tu abuses
    mais bon je te remercie quand même.
    Au moins, j'ai la correction

    Edit: je viens de la tester et j'ai une erreur dans phpmyadmin

    #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 'when > 'M' THEN 0 ELSE 1 END LIMIT 0, 30' at line 1
    bye

  8. #8
    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
    Citation Envoyé par titfab
    Je serais étonné que ça fonctionne ça.
    Avez-vous testé votre requête ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    c'est ce que je viens de dire en éditant mon message !!!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT CASE entreprise
    WHEN 'adherent' == 1 and upper(substring( entreprise, 1, 1 ) > 'M' THEN ...
    WHEN upper(substring( entreprise, 1, 1 ) < 'M' THEN ...
    END AS ordre_affichage,
    ELSE 1
    END 
    FROM ma_table;
    mais je suis un peu perdu là.


    Edit: merci Mr l'admin pour les balises code, excusez moi

  11. #11
    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
    A mon avis, il ne faut pas de double "=".
    Relisez cette partie sur la structure CASE WHEN et procédez par étape

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    voila ce que je viens de faire, malheuresement encore une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT id, CASE entreprise
    WHEN upper(substring( entreprise, 1, 1 ) > 'M' THEN 1
    WHEN upper(substring( entreprise, 1, 1 ) < 'M' THEN 0
    END AS ORDRE_AFFICHAGE
    FROM test
    ORDER BY adherent DESC,ORDRE_AFFICHAGE DESC, entreprise
    Je pensais mettre à 1 les entreprise superieur à M et 0 inférieur.

    Question bête: la colonne ordre_affichage c'est une colonne virtuelle ou je dois la créer ?

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Citation Envoyé par kakahn
    voila ce que je viens de faire, malheuresement encore une erreur
    Quelle erreur ??????

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    #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 'THEN '1' WHEN upper ( substring( ent , 1 , 1 ) < 'M' THEN '0' END AS ORDRE_A' at line 1

  15. #15
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Vérifie tes parenthèses !
    Et revois la structure de l'instruction CASE.

  16. #16
    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
    Citation Envoyé par kakahn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, CASE entreprise -- A SUPPRIMER
    WHEN upper(substring( entreprise, 1, 1 ) > 'M' THEN 1
    WHEN upper(substring( entreprise, 1, 1 ) < 'M' THEN 0
    END AS ORDRE_AFFICHAGE
    FROM test
    ORDER BY adherent DESC,ORDRE_AFFICHAGE DESC, entreprise
    De plus il y a de fortes chances pour que soyez obligé de redéclarer ORDRE_AFFICHAGE dans la clause ORDER BY.
    Enfin indiquez votre version de MySQL systématiquement comme exigé dans les règles de ce forum car il est possible qu'elle ne supporte pas la construction CASE WHEN.
    Avez-vous d'effectuer une requête ULTRA simpliste avec la structure CASE WHEN ?

    Merci

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    je me sent nul d'avoir fait cette erreur là :s je pensais à une erreur plus complexe.

    Je vous remercie de votre aide j'ai réussi à obtenir ce que je voulais

    voici ma requete finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT ent,
    CASE ent
    WHEN upper(
    substring( ent, 1, 1 )
    ) > 'M'
    THEN '0'
    WHEN upper(
    substring( ent, 1, 1 )
    ) < 'M'
    THEN '1'
    END AS ORDRE_AFFICHAGE
    FROM test
    ORDER BY ORDRE_AFFICHAGE DESC, ent
    Et le resultat :

    ent

    ORDRE_AFFICHAGE
    pppp 1
    rrrr 1
    tttt 1
    yyyy 1
    zzzz 1
    aaaa 0
    bbbb 0
    cccc 0
    eeee 0
    hhh 0
    Encore merci

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    par contre je ne sais pas si c'est la meilleur façon.
    Vous pourriez me donner votre manière à vous de faire ce que j'ai voulu faire ???
    s'il vous plaît.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    tout compte fait j'ai encore un peu besoin d'aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Table: entreprises
    entreprise - adherent
    cccc              1
    pppp              1
    aaaa              0
    rrrrr                1
    eeee               0
    tttt                0
    yyyy              1
    zzzz               1
    bbbb              0
    hhh                1
    Ma requete a un peu évolué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT * ,
    CASE entreprises
    WHEN upper( substring( entreprises, 1, 1 ) ) < 'f'
    THEN '1' 
    WHEN upper( substring( entreprises, 1, 1 ) ) > 'f'
    THEN '0'
    END AS ORDRE_AFFICHAGE
    FROM entreprises
    WHERE produits LIKE '%9%'
    ORDER BY ORDRE_AFFICHAGE DESC , entreprises
    LIMIT 0 , 15
    Voila le resultat devrait etre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Table: entreprises
     
    entreprise - adherent - ORDRE_AFFICHAGE
     
    pppp              1                    1
    rrrrr                1                    1
    yyyy              1                    1
    zzzz               1                    1
    cccc              1                    1
    hhh                1                    1
    aaaa              0                     0
    bbbb              0                     0
    eeee              0                     0
    tttt                0                    0
    J'explique il classe à partir de la lettre f..... (cette lettre est normalement générée aléatoirement)
    d'abord les adhérents puis à partir de la lettre a les non adhérents
    C'est pour afficher aléatoirement les adhérents en premier page puis les non adhérents

    mais moi avec ma requete il affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Table: entreprises
     
    entreprise - adherent - ORDRE_AFFICHAGE
     
    pppp              1                    1
    rrrrr                1                    1
    tttt                0                    0
    yyyy              1                    1
    zzzz               1                    1
    aaaa              0                     0
    bbbb              0                     0
    cccc              1                    1
    eeee              0                     0
    hhh                1                    1
    il classe par ordre alpha à partir de f mais pas par adhérent.

    Une solution serait donc d'intégrér une seconde condition dans le when pour dire SI au dessus de F et adhérent etc mais j'arrive pas a intégrer un AND. J'obtiens à chaque fois une erreur.

    Aidez moi s'il vous plaît ca fait des heures que je cherche

  20. #20
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Une petite modifcation dans ton ORDER BY devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY adherent DESC, ORDRE_AFFICHAGE DESC , entreprises

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/10/2014, 15h31
  2. Menu classé par ordre alphabétique
    Par trikker dans le forum WordPress
    Réponses: 0
    Dernier message: 16/05/2010, 18h09
  3. Tie par ordre alphabétique d'une liste
    Par Freygolow dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/05/2007, 00h00
  4. Réponses: 1
    Dernier message: 27/05/2006, 23h13
  5. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53

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