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 :

Requête sur une chaîne de caractères


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Requête sur une chaîne de caractères
    Bonjour

    J'ai crée un formulaire qui lance une requête sur ma table 'charts'

    Mais je voudrais que que dans l'un des champs (en l'occurence Artiste), qu'on puisse chercher tous les entrées commençant par 'Thomas' par exemple, ou se terminant par 'Jackson'

    Je pense qu'il faut rajouter des % quelque part dans lavariable $Artiste, mais je ne sais pas où, j'ai déjà essayé plein de combinaisons, aucune ne fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = 'SELECT * FROM charts WHERE Artiste LIKE "'.$Artiste.'" ORDER BY `date` ASC';
    J'espère avoir été clair !
    Merci

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM charts
    WHERE Artiste LIKE 'Thomas%'
    ORDER BY date ASC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM charts
    WHERE Artiste LIKE '%Jackson'
    ORDER BY date ASC
    Le langage que tu utilises pour construire ta requête on s'en fiche alors évite de mettre autre chose que du SQL

    Dans la plupart des SGBD, les chaînes sont entre cotes (') donc ne met pas de guillemets autant que possible dans tes requêtes. Dans la plupart des langages, pour avoir une cote dans une chaîne de caractère, c'est \' ou double cote '' (à ne pas confondre avec guillemet).

    /!\ SQL est key sensitive donc Jackson est différent de jackson /!\

  3. #3
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par BiMouXeTTe
    /!\ SQL est key sensitive donc Jackson est différent de jackson /!\
    Ca dépend de la collation de ta table et/ou du champ, sachant qu'il est aussi possible de faire des conversions.

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par davcha
    Ca dépend de la collation de ta table et/ou du champ
    Hihi qu'est ce que ca veut dire ca ?

    Par conversions, tu pense à UPPER() et LOWER() ou des fonctions y ressemblant je suppose ?

  5. #5
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Je parle des collations et des possibilités de conversion avec le mot clef COLLATE.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci mais en fait ce que je veux, ce n'est pas chercher un nom d'artiste précis (Thomas et Jackson étaient des exemples), mais que la requête puisse afficher n'importe quel nom complet d'un artiste tapé dans le formulaire même si celui là n'est pas complet.
    J'espère que je suis un peu plus clair

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ben on t'as donné l'expression en SQL après c'est à toi de te débrouillé avec ton langage, cela ne nous regarde pas

    En principe ca fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TaRequete = 'SELECT * FROM TaTable WHERE Artiste LIKE \'%'+$artiste+'\'';
    Pour les langages, il y a souvent possibilité de faire des requetes paramétrées.

  8. #8
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Je dirais même plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TaRequete = 'SELECT * FROM TaTable WHERE Artiste LIKE CONVERT(\'%'.$artiste.'%\' using latin1) COLLATE latin1_general_ci';

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup à vous, ça fonctionne maintenant 8)

  10. #10
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Petite explication concernant le CONVERT et le COLLATE...

    latin1_general_ci est la collation insensible à la casse de l'europe de l'ouest (la france, par exemple), du jeu de caractères généralement utilisé par les occidentaux : latin1.

    Dans latin1, on a pas de caractères "zarbes" du genre les hiragana, ou les caractères russes... Si on veut vraiment être universel à ce niveau là, il faut utiliser utf8. Mais bon, ça sert à rien d'être universel si tu es certain que le nom de tes artistes ne contiendront jamais de caractères qui ne soient pas pris en charge par latin1 (pour se donner une bonne idée de ce qu'est latin1, voir ceci : ISO-8859-1).

    Donc, quand je fais COLLATE latin1_general_ci, je remplace la collation par défaut (celle définie dans la table/colonne) par latin1_general_ci, donc un truc insensible à la casse.

    Résultat, je peux faire une recherche sur 'miChaEL jACKsOn' et il va me trouver 'Michael Jackson' quand même.

    Pour CONVERT... '%artiste%' par défaut est codé en utf8 (en général), donc il faut d'abord le convertir en latin1. En bref, on est pas certain que ce '%artiste%' est, de base, en latin1, donc on le convertit pour être sûr.

    Ca demande pas beaucoup plus de lignes et ça nous évite une requête monstrueuse ou un bidouillage affreux dans le code du programme pour gérer les majuscules/minuscules.

    Je vous conseille de vous renseigner là dessus, c'est très intéressant.

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

Discussions similaires

  1. [Turbo Pascal] Exercice sur une chaîne de caractères
    Par mah00 dans le forum Turbo Pascal
    Réponses: 35
    Dernier message: 10/01/2010, 13h47
  2. Test sur une chaîne de caractères
    Par ThunderBolt_ dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/06/2007, 06h37
  3. requête sur des chaînes de caractères
    Par Mlude dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/08/2006, 20h52
  4. recherche sur une chaîne de caractères
    Par bogsy15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 12h01
  5. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52

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