limiter le nombre de caractères retournés par une requête ??

t-dt-b
Invité n'ayant pas de compte PHPfrance

08 sept. 2005, 15:08

Je m'explique

J'ai une table (t_CONTACTS) qui contient, entre autres, un champ Noms contenant des noms séparés par |, ces noms peuvent contenir une particule au milieu, du genre 'alain de delon'.
Je voudrais qu'une recherche sur 'alain de delon' retourne 'alain de delon', facile!,
et également qu'une recherche sur 'alain delon' retourne 'alain de delon'.

J'ai écrit ça :

$prenom = "alain";
$nom = "delon";

"SELECT * FROM t_CONTACTS WHERE Noms LIKE '%|".$prenom." %".$nom"|%' ";

ça fonctionne, sauf que si ma table contient '...|alain de delon|jean carmet|...", c ok pour les recherches alain delon ou alain de delon, mais aussi sur une recherche 'alain carmet'.

Y-a-t'il un moyen d'indiquer le nombre de caractères que peut couvrir le caractère joker %.

Merci, j'espère que je suis assez clair....

thierry

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 sept. 2005, 15:12

l'opérateur LIKE c'est pour les recherches simples, à ta place je me tournerai vers les recherches plein texte :
http://dev.mysql.com/doc/mysql/fr/fulltext-search.html

jette un coup d'oeil là-dessus déjà, pour voir si ça t'aide ;)

t-dt-b
Invité n'ayant pas de compte PHPfrance

09 sept. 2005, 06:59

Je n'ai pas l'impression qu'un requête plein texte est adaptée. ça va retourner encore plus de réponse.

Donc je reformule ma demande.

J'ai une table (t_CONTACTS) qui contient, entre autres, un champ Noms contenant des noms séparés par |, ces noms peuvent contenir une particule au milieu, du genre 'alain de delon'.
Ex : "...|alain de delon|jean carmet|..."
Je voudrais qu'une recherche sur 'alain de delon' retourne 'alain de delon', facile!,
et également qu'une recherche sur 'alain delon' retourne 'alain de delon'.

Comment écrire ma requête pour avoir ces 2 résultats?

merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 sept. 2005, 11:30

et bien pourquoi pas comme ceci :

Code : Tout sélectionner

SELECT * FROM t_contacts WHERE MATCH (noms) AGAINST ('alain') AND MATCH (noms) AGAINST ('delon');
moi je ferais comme ça, avec un LIKE ça va être la galère

édition : je viens de réaliser, tu ne veux ramener que la partie du champ qui correspond ???
je ne crois pas que ce soit possible
A quoi correspondent ces noms ? quand tu stockes plusieurs valeurs dans un même champs, avec des séparateurs, tu peux généralement te dire qu'il ya aurait une meilleure manière de faire et beaucoup plus pratique

mais bon là pour ramener uniquement les parties du champs qui correspondent je ne vois pas
en SQL je ne vois pas trop comment tu pourrais récupérer seulement des parties, il faudrait voir du coté du PHP et des expressions régulières je pense

t-dt-b
Invité n'ayant pas de compte PHPfrance

09 sept. 2005, 13:53

je te remercie pr la réponse. Pour m'en sortir, j'ai fais un traitement en php sur les retours de la requête.
Je sais que ce n'est pas très joli joli, mais je ne peux pas changer la structure de la table...
C'eut été plus simple de ne mettre qu'une valeur par type, mais il faut faire avec.

t