Recherche précise dans un champs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche précise dans un champs

Re: lol c'est ce que j'avais fait

par Ripat » 22 août 2005, 11:29

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...)

lol c'est ce que j'avais fait

par krull » 22 août 2005, 11:14

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

par Ripat » 22 août 2005, 10:54

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'

ouah, ?

par krull » 22 août 2005, 10:49

ca se lit comment ça ?
C'est quoi la différence avec like ?

Merci

par Ripat » 22 août 2005, 10:43

Ouch! #-o

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 !

Code : Tout sélectionner

SELECT * FROM ta_table WHERE ta_col REGEXP '(^|,)59(,|$)';

Recherche précise dans un champs

par krull » 22 août 2005, 10:35

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