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 :

Ordonner le résultat de REGEXP


Sujet :

Langage SQL

  1. #1
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut Ordonner le résultat de REGEXP
    Bonjour,

    J'ai une requête de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "SELECT ID, Nom, Tel FROM matable WHERE Nom REGEXP ? ORDER BY Nom ASC";
    Je voudrais savoir comment ordonner mon jeu de résultat en ayant en tête de liste les noms qui commencent par le terme de ma recherche. Et idem si je fais une recherche sur le téléphone. Sinon 06 07 50 50 50 va être classé avant 07 50 50 50 50 si je fais une recherche sur 07 par exemple. Je précise que je souhaites tous les résultats et donc l'opérateur ^ ne convient pas.

    Je ne souhaites pas ordonner le jeu de résultat en php mais intégrer cet ordre directement dans ma requête, et pas trouvé les bons termes pour avoir une réponse dans un moteur de recherche.

    Merci

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 197
    Points : 8 412
    Points
    8 412
    Billets dans le blog
    17
    Par défaut
    si je fais une recherche sur le téléphone. Sinon 06 07 50 50 50 va être classé avant 07 50 50 50 50 si je fais une recherche sur 07 par exemple
    Le tri est effectué selon la clause ORDER BY, quelque soit le WHERE.
    Je ne comprends pas ton problème.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Le tri est effectué selon la clause ORDER BY, quelque soit le WHERE.
    Je ne comprends pas ton problème.
    Bonjour Séb,

    C'est à dire que la recherche avec REGEXP va rechercher toutes les chaines de caractères contenant 07 dans mon exemple, quelque soit sa position dans le champ téléphone (pour le nom c'est idem). Je souhaiterais que mon set de résultat soit ordonné avec en premier les champs qui commencent par 07, c'est ce que je cherche à faire. Un simple ORDER BY ne suffit pas, par quoi faut-il le compléter ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 197
    Points : 8 412
    Points
    8 412
    Billets dans le blog
    17
    Par défaut
    Donne un exemple avec un jeu de données minimaliste mais représentatif, et le résultat attendu avec ce dernier.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 972
    Points
    52 972
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ID, Nom, Tel 
    FROM   matable 
    ORDER  BY CASE 
                 WHEN Tel LIKE '07%' 
                    THEN 1 
                 ELSE 2 
              END, Tel;

    Et pour apprendre le SQL, mon site web et mes bouquins !
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Bonjour,

    Merci beaucoup SQLpro, j'avais vu des exemples avec CASE en faisant des recherches mais je ne savais pas si c'était la bonne approche et je ne savais pas comment l'utiliser. Donc ça fonctionne maintenant comme attendu. J'ai simplement rajouté le REGEXP pour n'avoir que des résultats comprenant ma recherche et ils sont bien ordonnés en commençant par ceux qui correspondent au terme de ma recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ID, Nom, Tel 
    FROM   matable 
    WHERE Tel REGEXP '07'
    ORDER  BY CASE 
                 WHEN Tel LIKE '07%' 
                    THEN 1 
                 ELSE 2 
              END, Tel;
    07 .. .. .. ..
    07 .. .. .. ..
    06 .. 07 .. ..

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 972
    Points
    52 972
    Billets dans le blog
    6
    Par défaut
    Inutile d'utiliser un très couteux et très dangereux REGEX quand le LIKE fait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ID, Nom, Tel 
    FROM   matable 
    WHERE Tel LIKE '%07%'
    ORDER  BY CASE 
                 WHEN Tel LIKE '07%' 
                    THEN 1 
                 ELSE 2 
              END, Tel;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Ok merci

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 885
    Points : 6 623
    Points
    6 623
    Par défaut
    Ne pourrait-on pas utiliser la fonction LOCATE (ou INSTR ou POSITION ou CHARINDEX) qui renvoie l'index de la sous-chaîne recherchée, Index qui pourrait être utilisé dans la clause ORDER BY ?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 972
    Points
    52 972
    Billets dans le blog
    6
    Par défaut
    Le like est optimisé, pas les fonctions.....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. [langage] [RegExp] Récupérer une portion de phrase
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2004, 22h01
  2. ordonner selon un champ d'un autre table
    Par Mister dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/10/2003, 14h40
  3. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  4. regexp
    Par mathieu gérard dans le forum ASP
    Réponses: 4
    Dernier message: 02/10/2003, 18h05
  5. Ordonner ds l'ordre croissant de 2 champs confondus
    Par Coolbens dans le forum Langage SQL
    Réponses: 11
    Dernier message: 17/06/2003, 16h39

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