requete en omettant un mot [MySQL] - Programmation
Marsh Posté le 26-11-2001 à 23:40:01
une petite expression régulière ?
Marsh Posté le 26-11-2001 à 23:46:10
Sh@rdar a écrit a écrit : une petite expression régulière ? |
ou where mot=indien OR mot=navaro AND NOT mot=iroquoi...
Marsh Posté le 26-11-2001 à 23:49:19
Suri a écrit a écrit : ou where mot=indien OR mot=navaro AND NOT mot=iroquoi... |
hum...
ça c'est le résultat final, mais pour traiter les mots tapés dans le moteur ?
Marsh Posté le 27-11-2001 à 00:02:20
Sh@rdar a écrit a écrit : hum... ça c'est le résultat final, mais pour traiter les mots tapés dans le moteur ? |
ben j'ai rien compris alors...
Marsh Posté le 27-11-2001 à 00:12:56
disons que les mots tapés dans le moteur changent (ils sont tapés par l'utilisateur) donc il faut un système permettant d'isoler les mots avec un - devant de manière à les écarter lors de la recherche (comme ta query).
mais pour ça faut d'abord les traiter, je suggère donc une expression régulière , on découpe au niveau des espaces, on récupère les différents mots, avec un + devant on mets LIKE '%keyword%' et avec un - moins NOT LIKE '%keyword2%'
Marsh Posté le 27-11-2001 à 01:47:38
Ah ouais!! un parser quoi!
Putain c vraiment bien le C qd on y pense..;
le truc le plus dur c de se decoller des pointeurs apres..
Marsh Posté le 27-11-2001 à 08:35:57
Sh@rdar a écrit a écrit : mais pour ça faut d'abord les traiter, je suggère donc une expression régulière , on découpe au niveau des espaces, on récupère les différents mots, avec un + devant on mets LIKE '%keyword%' et avec un - moins NOT LIKE '%keyword2%' |
WHAT ?????? alors qu'un explode(" ", ...) suffit bien !
Marsh Posté le 27-11-2001 à 09:16:18
un split ou un explode oui, mais imagine une regexp qui te remplace les " +" par des "AND mot like '%\\1%'" et les " -" par des "AND NOT mot like '%\\1%'".
en 2 lignes tu as fini... mais les regexp et moi :D :(
un truc du genre (non testé et surement faux!!)
$critere= eregi_replace("+([:alnum:]*)"," AND mot like '%\\1%'", $critère);
$critere= eregi_replace("-([:alnum:]*)"," AND mot NOT like '%\\1%'", $critère);
à méditer ;)
[edtdd]--Message édité par ethernal--[/edtdd]
Marsh Posté le 27-11-2001 à 09:23:50
ethernal > effectivement, c'est plus simple que je ne le pensais.
Marsh Posté le 27-11-2001 à 22:47:06
merci à tous, mais j'avais trouvé tout seul comme un grand en matant dans le fichier search.php de Phorum, qui propose une telle fonctionnalité...
@+
Marsh Posté le 27-11-2001 à 23:42:50
vive les regexp !!!!!!!!
mine de rien c'est puissant ces petites bêtes
mention très bien pour ethernal
Marsh Posté le 28-11-2001 à 11:54:15
Sh@rdar> merci mais l'idée vient de toi
Haazheel> tu pourrais me donner cette puissante regexp pour ma culture générale stp ? on sait jamais que j'en ai besoin
Marsh Posté le 28-11-2001 à 22:34:22
ethernal a écrit a écrit : Sh@rdar> merci mais l'idée vient de toi Haazheel> tu pourrais me donner cette puissante regexp pour ma culture générale stp ? on sait jamais que j'en ai besoin |
Pas de problèmes...
Mais je sais pas quand j'aurai le temps de m'y consacrer... Fin de semaine au grand maximum...
Marsh Posté le 29-11-2001 à 09:50:06
utilise les recherches booleennes de mysql 4
Marsh Posté le 26-11-2001 à 22:54:36
slt,
c'est pour un moteur de recherche.
si on entre par exemple:
indien +navajo -iroquoi
il me met les champs contenant indien+navajo mais pas avec iroquoi...
si qqn peut m'aider...