Recherche précise dans un champs
Posté : 22 août 2005, 10:35
par krull
Bonjour
Dans une table, j'ai un champ avec une liste de nombres (la quantité de nombre peut varier: 53,54,59,23,590,12
Je cherche à savoir si, par exemple, le 59 est dans la liste.
$nb=59;
Je pensais faire ça dans ma requête :
lenombre LIKE '%$inb%' OR lenombre = '$nb'
Le pb est que si ma liste est : 53,54,23,590,12 (donc pas le 59), la requête retourne oui car il y a 590 !!
Comment faire pour sa voir que 59 est dans la liste sachant qu'elle peut être :
- 59
- 59,38
- 24,59,23
- rien
- 21,590,59
J'espère être clair ?
Merci à vous, j'ai bien du mal.
Krull
Posté : 22 août 2005, 10:43
par Ripat
Ouch!
Je suppose que tu n'as pas envie de changer la structure de ta bdd?
Il y a bien une solution mais, gare aux performances !
ouah, ?
Posté : 22 août 2005, 10:49
par krull
ca se lit comment ça ?
C'est quoi la différence avec like ?
Merci
Posté : 22 août 2005, 10:54
par Ripat
C'est une comparaison par expression régulière.
Code : Tout sélectionner
(^|,) soit début de chaîne, soit une virgule
59 le chiffre recherché
(,|$) virgule ou fin de chaîne
Les opérateurs du LIKE ne permettent pas ce genre de gymnastique.
Le moteur de regex utilisé par MySQL est beaucoup plus rapide que celui de PHP (mais moins souple et complet) mais, tout de même, au niveau perfo, ce n'est pas l'idéal. Ca dépend de la taille de ta table.
A la rigueur la syntaxe ci-dessous pourrait être traduite par
Code : Tout sélectionner
SELECT *
FROM ta_table
WHERE ta_col LIKE '%,59,%'
OR ta_col LIKE '59,%'
OR ta_col LIKE '%,59'
OR ta_col LIKE '59'
lol c'est ce que j'avais fait
Posté : 22 août 2005, 11:14
par krull
Merci bien
J'avais effectivement fait plusieurs like (et j'en avais oublié un) d'ou l'erreur.
Mais ton code est plus rapide.
J'espère que ça ne va pas trop ralentir.
En ce qui concerne la taille d'une base de données, j'ai du mal à me rendre compte !
A partir de combien de ligne on considère que la base commence à être importante ??
Merci
Re: lol c'est ce que j'avais fait
Posté : 22 août 2005, 11:29
par Ripat
A partir de combien de ligne on considère que la base commence à être importante ??
Merci
Ca dépend de la manière dont est structurée ta bdd. Bien construite, plusieurs millions de lignes ne posent aucun problème.
Mal construite, ça peut se planter à plusieurs milliers!
Dès qu'une requête met plusieurs secondes avant de retourner un résultat, il y a du travail d'optimisation en vue. (en local, sur une machine non chargée et sans affichage, il va sans dire...)