Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2011, 23h20   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
Par défaut UI Autocomplete sur 2 champs SQL

bonsoir,

j'utilise Autocomplete pour faire une autocomplétion afin de rechercher des membres.
J'ai un champ MembNom et un autre MembPrenom.

Avec une requête SQL, je vais chercher le Nom du membre, mais j'affiche pour information le Prénom du Membre qui se situe dans un autre champ.
J'aimerais pouvoir faire une recherche sur le Nom et le prénom dans le même champ texte mais ce qui signigie que je dois aller chercher dans 2 colonnes SQL différentes.

MembNom et MembPrenom

Je ne sais pas comment faire, dois-je ajouter une option à UI Autocomplete pour rechercher sur Nom + Prénom, ou bien dois-je faire un découpage en regex de $_GET['term'] pour scinder le nom et le prénom afin d'effectuer la requête ?

Actuellement, j'utilise le code JS ci-dessous :

Code :
1
2
3
4
5
6
7
8
		//Autocomplete Membre dans Dialog
		$("#Prospecteur").autocomplete({
                source: "action_autocomplete-membre.php",
                minLength: 1,
                select: function(event, ui) {
                    $('#ProspecteurId').val(ui.item.id);
                }
            });
Et le code PHP source :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
	$sql_membre="SELECT * FROM Membre WHERE MembNom like '".$_GET['term']."%' AND MembActif=1 ORDER BY MembNom ASC;";
	$res_membre = mysql_query($sql_membre);
	while($data_membre = mysql_fetch_array($res_membre))
	{
			$row_array['id'] = $data_membre['MembreId'];
			$row_array['value'] = stripslashes($data_membre['MembNom'].' '.$data_membre['MembPrenom']);
 
			array_push($return_arr,$row_array);
 
	}
 
 
///Deconnexion de la base de donnees
deconnecter();
 
/* Toss back results as json encoded array. */
echo json_encode($return_arr);
Merci d'avance pour votre aide ou vos idées.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 11h43   #2
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Tu as pensé à la recherche FULLTEXT ? Tu crée une clé "FULLTEXT" sur tes 2 champs.
Et tu utilises MATCH AGAINST
http://www.google.fr/url?sa=t&source...V2tb2t-YmOG1ZQ
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 11h47   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
Pouvez-vous préciser votre idée, ce serait mettre un fulltext dans la table.

pour le match against, je ne vois pas.
Merci.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 11h49   #4
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Oui mettre un fulltext sur ton champ prénom et nom.

Comme ça tu peux faire ta requete sql sur ce fulltext avec ton input, tu as regardé le lien que je t'ai donné ?
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 11h51   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
très bien, je regarde ce point.
Merci.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h01   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
Je viens de le mettre en place le fulltext dans la table:

MembNom FULLTEXT MembNom MembPrenom

Voici ma requete SQL pour faire l'autocompletion

Code :
$sql_membre="SELECT * FROM Membre  WHERE MATCH (MembNom,MembPrenom) AGAINST ('" . $_GET['term'] . "') AND MembActif = 1";
Par contre, l'autocomplétion se fait uniquement lorsque j'ai rempli en entier le nom du Membre.
Exemple : LALANDE Severine
Il ne me propose que le libelle lorsque j'ai complètement saisi "LALANDE" et si je saisi Séverine, il me propose également "MERCIER Séverine" en résultat.

Y-t-il moyen de commencer dès la 1ère lettre l'autocompletion ?

Merci.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h14   #7
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Je n'ai pas testé mais d'après la traduction de :
http://dev.mysql.com/doc/refman/5.5/...t-boolean.html

Si tu fais une recherche booléenne en mettant le caractère '*' après chaque mot ça devrait marcher.
Exemple : 'san luc' doit devenir 'san* luc*'
Pour obtenir cela utilise un split de l'espace et tu rajoutes le *.

En espérant que ça fonctionne.
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h21   #8
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
En fait ça ne fonctionne pas, car il ne reconnait pas

LAL*

Exemple : LALANDE Severine

Merci.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h45   #9
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Fait voir ta requête sql en fessant ce que je t'ai indiqué.
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 12h57   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
voici le code de la requête

Code :
1
2
3
4
5
6
7
8
$str=str_replace(' ','* ',$_GET['term']);
$str=$str.'*';
 
	echo $sql_membre="SELECT * FROM Membre  WHERE MATCH (MembNom,MembPrenom) AGAINST ('".$str."%') AND MembActif = 1";
 
Si je recherche un nom commençant par "ALLA" :
 
SELECT * FROM Membre  WHERE MATCH (MembNom,MembPrenom) AGAINST ('alla*%') AND MembActif = 1";
I me sort un nom uniquement lorsque j'ai saisi le NOM complet.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 13h06   #11
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Tu dois avoir comme requête :

Code :
SELECT * FROM Membre WHERE MATCH (MembNom,MembPrenom) AGAINST ('alla*' IN BOOLEAN MODE) AND MembActif = 1
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 13h11   #12
Invité de passage
 
Inscription : décembre 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 24
Points : 1
Points : 1
Ca fonctionne en effet, Merci.

Maintenant, il me sort bien le Nom recherché dès lors que je commence à saisir le prénom il me propose tous les prénoms commençant par les mêmes lettres.

Si je recherche LALANDE Françoise, il ne sort tous les Franck, François, Francis.

Si tu as une idée, merci beaucoup.
pixworld2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 09h25   #13
Membre éclairé
 
sébastien courjean
Inscription : novembre 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : sébastien courjean
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : novembre 2010
Messages : 204
Points : 319
Points : 319
Sur le même principe que l'ajout du caractère '*' à la fin de chaque mot, il te suffit cette fois ci d'ajouter le caractère '+' devant chaque mot recherché comme indiquer dans la documentation que je t'ai donné en lien cela permettra de faire un "ET" au lieu du "OU" par défaut.
__________________
Sébastien Courjean
Développeur Web
scourjean@cyres.fr
http://www.cyres.fr/
scourjean est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h24.


 
 
 
 
Partenaires

Hébergement Web