utilisation de LIKE

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 20:27

bonjour,
j'ai des utilisateurs dans une table user.
Ma table:

Code : Tout sélectionner

CREATE TABLE `user` ( `id` INT( 10 ) NOT NULL , `name` VARCHAR( 255 ) NOT NULL , `firstname` VARCHAR( 255 ) NOT NULL , `username` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) );
J'utilise ensuite LIKE dans une requete sql pour afficher les résultats d'une requete.
La recherche peut se faire par nom ou prénom . La valeur envoyée par le formulaire de recherche est dans une variable php $search.

Ma requete:
$sql = "SELECT * FROM user WHERE name LIKE '%$search%' OR username LIKE '%$search%' OR firstname LIKE '%$search%'";
Supposons que je cherche une personne nommée james bond.
Si je tape "james" pour la recherche, j'ai le résultat =>ok
Si je tape "bond" pour la recherche, j'ai le résultat =>ok
Si je tape "james bond", la recherche ne me retourne aucun résultat.

Est-ce normal? comment puis-je éventuellement contourner ce pb?
Merci pour vos réponses.

Eléphanteau du PHP | 40 Messages

10 déc. 2007, 20:41

normale, parce que sa m'etonerait que tu est un nom ou un prenom qui ressemble a %james bond%
tu devrais couper ton "james bond" en deux mots.
Modifié en dernier par gadgino le 10 déc. 2007, 23:21, modifié 1 fois.
en construction http://plus2site.fr

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 21:08

couper en 2 avec php ou mysql?
je pensais que LIKE renvoyait tout ce "qui ressemble à", en considérant que la chaine "james" est incluse dans la chaine 'james bond"...bref.

si j'ai bien compris, cette recherche est impossible sans séparation de la chaine en 2?

Mammouth du PHP | 2937 Messages

10 déc. 2007, 21:54

Modifie ta requête comme suit :
$search_like = mysql_real_escape_string (str_replace (' ', '%', $search));
$sql = "SELECT *
FROM user
WHERE name LIKE '%".$search_like."%'
OR username LIKE '%".$search_like."%'
OR firstname LIKE '%".$search_like."%'";

Eléphanteau du PHP | 40 Messages

10 déc. 2007, 22:18

j'ai peur que la recherche avec %james%bond% marche pas mieu??
en construction http://plus2site.fr

Eléphanteau du PHP | 40 Messages

10 déc. 2007, 23:12

escuser moi mais j'ai pas l'abitude de pondre des regex c'est le prems en fait.
vois si cette condition la te va mais sa devient beaucoup de bidouille.
$search_like = mysql_real_escape_string (str_replace (' ', '|', $search)); 
$sql = "SELECT *
FROM user
WHERE name REGEX '.*(".$search_like.").*'
OR username REGEX '.*(".$search_like.").*'
OR firstname REGEX '.*(".$search_like.").*'";
bien entendut s'il y a plus d'un espace ça se complique.
en construction http://plus2site.fr

ViPHP
ViPHP | 4039 Messages

10 déc. 2007, 23:29

Et pourquoi ne pas étudier les possibilités de recherche fulltext de mysql ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 déc. 2007, 23:34

Et pourquoi ne pas étudier les possibilités de recherche fulltext de mysql ?
Sur un nom et/ou prénom... pas vraiment utile :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

10 déc. 2007, 23:50

Et pourquoi ne pas étudier les possibilités de recherche fulltext de mysql ?
Sur un nom et/ou prénom... pas vraiment utile :-k
Ah si, même sur les booléens, si on veut.. enfin.. presque, hein.. :roll:
(note, avec certains noms, c'est toujours pratique)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.