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 :

Utilisation de SUBSTR avec WHERE dans une requête SQL


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Utilisation de SUBSTR avec WHERE dans une requête SQL
    Bonjour,

    J'ai actuellement une base de donnée regroupant des communications.
    Dans la table principale, intitulée communications, j'ai une "id_com" dans laquelle je ne souhaite sélectionnée que certaines valeurs.

    Mes id_com sont composées par la concaténation d'un id qui s'incrémente à chaque création de com et d'un login utilisateur qui lui est constant.

    Cela se présente donc de la façon suivante:

    id_com
    133012
    233012
    133026
    333012
    133045
    233045
    433012
    533012
    ...
    Où 33012, 33026 et 33045 sont des logins utilisateur.

    Je souhaite pouvoir ne récupérer avec mon SELECT, que les ligne présentant le login de mon choix.

    J'ai essayé d'utiliser la requête suivant, où la variable login est récupérée en php, mais cela ne passe pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_com FROM communication WHERE (SUBSTR(id_com,-5,5) = \''.$data['login'].'\)

    Je voulais donc savoir s'il était possible d'utiliser un SUBSTR dans un WHERE et si oui, est-ce que vous aviez une idée de l'endroit d'où pouvait venir mon soucis.

    Merci d'avance!

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour et bienvenue sur le forum ,

    Ton problème vient de ton second paramètre dans la fonction SUBSTRING.
    Sa syntaxe est la suivante : SUBSTRING(champ, position, longueur) où champ est le champ qui t'intéresse, position est le caractère de début d'extraction de la sous-chaîne, longueur est la longueur de la sous-chaîne.
    Dans ton cas, ça doit donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_com
    FROM communication
    WHERE (SUBSTR(id_com,2,5) = \''.$data['login'].'\)
    Attention, je ne suis pas sûr qu'il ne faille pas transformer ton champ id_com en chaîne de caractères si jamais celui-ci est un entier (je n'ai jamais testé, mais la fonction SUBSTRING prend une chaîne de caractères en premier paramètre, pas un entier).

    Si ça ne fonctionnait pas avec un entier, on le cast en chaîne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_com
    FROM communication
    WHERE (SUBSTR(CAST(id_com AS CHAR(6), 2, 5) = \''.$data['login'].'\)
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci pour ton accueil!

    C'est sympa d'avoir répondu mais j'ai finalement réussi à faire ce que je voulais.
    La fonction SUBSTR est donc bel et bien utilisable dans le WHERE.

    Par rapport à ce que tu as écrit, il faut bien prendre comme paramètre (id_com, -5,5) et non (id_com,2,5) car sinon, dès que je serais à la 10e com, je prendrai le second chiffre de mon identifiant dans mon login, ce que bien sûr je ne dois pas faire! Le -5 permet de partir de la fin et de remonter de 5 caractères, pour être certain de n'avoir que mon login.

    Concernant la suite de ta réponse, il n'est pas utile de passer l'entier en chaine de caractères, ça fonctionne comme ça.

    Voilà ma requête au final, fonctionnelle:
    SELECT DISTINCT communication.id_com, mode_com, date_com FROM contenir_etudiant
    RIGHT JOIN communication ON (communication.id_com = contenir_etudiant.id_com)
    WHERE \''.$login.'\' = SUBSTR(communication.id_com, -5, 5)
    ORDER BY date_com DESC
    LIMIT '.$numPage.','.$nbComParPage.'
    Voilà, j'espère que mon message pourra être utile à certaines personnes!

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    SALUT,
    je m'intègre un peu mais j'ai un problème de ce genre la solution de thipyt m' intéressé mais mon problème c'est que le nombre de mes chaînes de caractères sont différentes par exemples dans une me colonne il y'a 612.3.7091.21078 , 612.3.118.34923 et ça 612.3.141.392 comment pouvoir récupérer les chiffres après le dernier point de la chaîne?

  5. #5
    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 065
    Points
    19 065
    Par défaut
    Salut à tous.

    @ thipyt : pour récupérer le login de l'utilisateur, qui dans ton exemple est composé de cinq chiffres, et en espérant qu'il reste constant, il suffit d'utiliser la fonction "right(colonne, 5)".
    Autrement dit, tu prends les cinq chiffres en partant de la droite.

    @ seydina10 : même si vous croyez que votre problème est similaire, le mieux est d'ouvrir un nouveau sujet.
    Pour récupérer les groupes de chiffres, il faut pour cela utiliser la fonction "substring_index()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    --------------
    select SUBSTRING_INDEX(SUBSTRING_INDEX('612.3.7091.21078','.',1),'.',-1) as Num1,
           SUBSTRING_INDEX(SUBSTRING_INDEX('612.3.7091.21078','.',2),'.',-1) as Num2,
           SUBSTRING_INDEX(SUBSTRING_INDEX('612.3.7091.21078','.',3),'.',-1) as Num3,
           SUBSTRING_INDEX(SUBSTRING_INDEX('612.3.7091.21078','.',4),'.',-1) as Num4
    --------------
     
    +------+------+------+-------+
    | Num1 | Num2 | Num3 | Num4  |
    +------+------+------+-------+
    | 612  | 3    | 7091 | 21078 |
    +------+------+------+-------+
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/05/2010, 16h54
  2. Utilisation de MAX avec String dans une requête SQL
    Par Sun03 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/04/2010, 12h22
  3. Réponses: 3
    Dernier message: 12/12/2008, 08h05
  4. [RegEx] remplacer AND par WHERE dans une requête SQL
    Par Kyaan dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2008, 14h42
  5. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46

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