Requête mySQL utilisant WHERE et SUBSTR

Fermé
thipyt - 23 mai 2008 à 19:24
ludo394 Messages postés 1 Date d'inscription jeudi 19 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012 - 19 janv. 2012 à 18:06
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:

'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!

6 réponses

epsiloneIB Messages postés 133 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 13 septembre 2009 8
24 mai 2008 à 20:10
Ton problème, posé comme ça, n'est pas clair!

Donne moi un exemple de ton id_com si c'est possible!
Sinon, essaye d'enlever les parenthèses!
J'ai essayé cette syntaxe et ça marche pour moi thypit :
SELECT * FROM TABLE WHERE SUBSTR(CHAMPS,1,4) = "abcd";

Epsilone
2
epsiloneIB Messages postés 133 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 13 septembre 2009 8
23 mai 2008 à 20:25
Si tu veux récuprer les 5 premiers caractères de ton id_com, tu dois faire : SUBSTR(id_com,1,5)

Voici la syntaxe :
SUBSTR(str,pos): sélectionne tous les caractères de <str> en commençant par position <pos>. Notez que cette syntaxe n’est pas prise en charge par SQL Server.

SUBSTR(str,pos,len): en commençant par le caractère <pos> dans la chaîne <str>, sélectionne les caractères <len> suivants.

Sinon, si tes id_com sont sous le format :
id_com
133012
233012
133026
333012
133045
233045
433012
533012

Bin je ne vois pas l'utilité de ce SUBSTR!

Explique moi!

Epsilone
1
En faisant SUBSTR(id_com, -5, 5), je récupère bien seulement mon login, du moins en php. Je sais donc que la fonction fonctionne, je l'ai testé et affiché mes login issus de cette fonction.

Le soucis, c'est que pour faire une pagination qui nécessitera un certain nombre de tests, je dois utiliser cette fonction SUBSTR dans mon WHERE, pour ne prendre en compte que les id_com correspondant à mon login, c'est à dire le login que je compare, comme expliqué dans mon premier message.


Ma question n'est donc pas de savoir comment fonction la fonction SUBSTR, mais plutôt de savoir s'il est possible de l'utiliser dans un WHERE et si oui, comment.


Tu dis ne pas voir l'utilité de mon SUBSTR, mais comment veux-tu retrouver les com correspondant à mon login (de 5 chiffres et commençant par 33) sans utiliser cette fonction??

J'ai trouvé cette fonction et j'ai pensé qu'elle pouvait correspondre à mon besoin, maintenant il y a peut être d'autres solutions et qu'effectivement cette fonction n'est pas adaptée ici...
Je n'ai pas la prétention de tout connaitre du php et mySQL mais et c'est pour ça que j'espère que quelqu'un pourra m'aider à résoudre mon problème!
1
ludo394 Messages postés 1 Date d'inscription jeudi 19 janvier 2012 Statut Membre Dernière intervention 19 janvier 2012 1
19 janv. 2012 à 18:06
Bonjour,
Est-ce qu'un WHERE CHAMP LIKE '%login%' ne pourrait pas répondre à ta question plus simplement ?
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
epsiloneIB Messages postés 133 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 13 septembre 2009 8
23 mai 2008 à 20:00
Bonjour,

Je ne vois pas pourquoi tu utilises ce SUBSRT!

Epsilone
0
Euh... bah pour ne récupérer que les id_com correspondant à mon login!

Comment veux-tu faire sinon?

La fonction substr permet de ne s'intéresser qu'à une partie de mon id_com et de le comparer avec mon login.
Du moins c'est comme ça que je le vois...

Peut-être que je me trompe sur l'utilisation de cette fonction... Peux-tu développer stp?
0