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

PHP & Base de données Discussion :

créer un lexique par ordre alphabétique


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Par défaut créer un lexique par ordre alphabétique
    Bonjour
    Je veux créer une page avec plus d'une centaine de sigles regroupés par ordre alphabétique.
    Est-ce que je dois faire un <div> pour chaque lettre avec
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `lexique` WHERE name LIKE 'a%'
    la structure de ma table est basique : ID, name, content
    ou est il possible de regrouper l'ensemble dans une suite d'instructions php qui boucle sur les 26 lettres de l'alphabet.
    Merci de me donner une piste de recherche et bonne soirée

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Et juste un order by , c'est pas bon ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT * FROM `lexique` order by name

  3. #3
    Membre confirmé Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Par défaut
    Non parce que je veux une div pour les A, une seconde pour les B etc.......

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

    Selon que la collation utilisée est sensible ou pas à la casse LIKE 'a%'n'aura pas le même résultat.
    L'ajout d'une clause COLLATE permet de sécuriser le résultat.

    Ensuite, pour séparer le résultat en fonction de l'initiale, vous pouvez utiliser le partitionnement avec une fonction fenêtrée à partir de la version 8 de MySQL.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 329
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 329
    Billets dans le blog
    17
    Par défaut
    L'opération est triviale grâce à PDO et son option de groupement.

    Je te conseille de faire ceci :

    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
    16
    17
    18
    19
    $sql = <<<SQL
        SELECT ALL LEFT(name, 1), name, content
        FROM lexique
        ORDER BY name ASC
        SQL;
     
    $result = $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP);
    // Le FETCH_GROUP permet d'obtenir un tableau de résultats groupés selon la 1re colonne du SELECT
    // Ici sur la 1re lettre de name calculée avec LEFT()
     
    // Pour bien comprendre ce qui se passe et ce qui suit :
    // echo '<pre>', print_r($result, true), '</pre>';
     
    foreach ($result as $first_letter => $items) {
        echo "<h2>{$first_letter}</h2>";
        foreach ($items as $item) {
            echo "<h3>{$item['name']}</h3>";
        }
    }

  6. #6
    Membre confirmé Avatar de lesitadom39
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2015
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2015
    Messages : 112
    Par défaut Eurêka
    Merci, c'est impeccable. Ton conseil m'a été précieux et instructif !
    Dans un post précédent, on me conseillait de d'ajouter un COLLATE, est ce utile?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 611
    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 611
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par lesitadom39 Voir le message
    Merci, c'est impeccable. Ton conseil m'a été précieux et instructif !
    Dans un post précédent, on me conseillait de d'ajouter un COLLATE, est ce utile?
    Comme indiqué précédemment

    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Selon que la collation utilisée est sensible ou pas à la casse LIKE 'a%'n'aura pas le même résultat.
    L'ajout d'une clause COLLATE permet de sécuriser le résultat.
    Pour savoir si la collation est sensible à la casse, soit elle est suffixée par _CS (case sensitive) donc sensible à la casse, soit elle est suffixée par _CI (case insensitive) auquel cas elle ne l'est pas.

Discussions similaires

  1. Formulaire par ordre alphabétique
    Par Nabouille dans le forum Access
    Réponses: 1
    Dernier message: 21/03/2006, 11h29
  2. [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
  3. Affichage par ordre alphabétique
    Par masseur dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 11h41
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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