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 :

Case insentive avec les minuscules en premier


Sujet :

Requêtes MySQL

  1. #1
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut Case insentive avec les minuscules en premier
    Bonjour,


    sur une appli web j'affiche des données provenant d'une base SQL. elles sont triées par nom sans tenir compte de la case.
    dans ma page résultat j'évite la répétition du nom quand il est identique, c'est plus propre, mais je tombe sur un exemple très bête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----
    | test
    | test
    | TEST
    | test
    | test
    +---
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----
    | test
    | 
    | TEST
    | test
    | 
    +---
    alors que je voudrais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----
    | test
    | test
    | test
    | test
    | TEST
    +---
    qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----
    | test
    | 
    | 
    | 
    | TEST
    +---
    Notez aussi que je veux conserver l'ordre alpha insensitif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    +----
    | aaa
    | AAA
    | bbb
    | bbb
    | BBB
    +---
    J'ai trouvé une solution avec un ORDER BY nom, BINARY(nom) DESC, mais est-ce la solution la plus performante ? En tout cas elle est simple.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez probablement obtenir ce que vous voulez avec un COLLATE .
    (https://dev.mysql.com/doc/refman/5.7...t-collate.html)

  3. #3
    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 381
    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 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut Paul Toth.

    Citation Envoyé par Paul Toth
    des données provenant d'une base SQL
    Ne confondez pas SQL qui est un langage de requête, avec le nom de votre SGBD qui ici est de type relationnelle et porte le nom de MySql.

    Pour résoudre votre problème de tri, vous devez déclarer dans votre table, le charset mais aussi le collate.
    D'après ce que j'ai pu comprendre, vous désirez conserver la distinction entre "a" minuscule et "A" majuscule, donc sensible à la casse.

    J'utilise LATIN1 et je désire que ma casse soit insensible aux minuscule et majuscule.
    de ce fait, j'utilise comme collate "latin1_general_ci".
    Si vous utilisez utf8 comme charset, vous devez mettre alors "utf8_general_cs".

    Comment introduire le collate ?
    Pour votre base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `utf8`
        DEFAULT COLLATE       `utf8_general_cs`;
    Pour votre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `parcours`
    ( ...
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_cs`
      ROW_FORMAT=COMPRESSED;
    Ceci est valable pour toutes les colonnes de types caractères de votre table.
    Mais on peut le faire aussi que sur une seule colonne, par exemple, si votre choix du collate est différent de celui utilisé dans la table ou dans la base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    col VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_cs
    Comment utilisez le collate dans un tri ?
    S'il est déjà déclaré dans votre base de données ou dans votre table ou encore dans votre colonne, vous n'avez rien à faire
    Dans le cas contraire, vous devez le précisez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by col collate utf8_general_cs
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/01/2011, 12h40
  2. [Batch] Lancer un batch depuis un autre avec les variables du premier
    Par mr_samy81 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 08/04/2009, 15h40
  3. Problème avec les cases d'un groupe d'option.
    Par auriolbeach dans le forum Access
    Réponses: 2
    Dernier message: 01/10/2005, 07h33
  4. Pb avec les cases à cocher
    Par magic8392 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/03/2005, 16h49
  5. Pb avec les cases à cocher
    Par magic8392 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 03/03/2005, 13h44

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