A voir également:
- Recherche de mots finis par un accent - MYSQL
- E avec accent - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche par image - Guide
- Mettre un mot de passe sur un dossier - Guide
- Mysql community server - Télécharger - Bases de données
10 réponses
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
Modifié par dragondark le 31/05/2011 à 17:03
Modifié par dragondark le 31/05/2011 à 17:03
$requete_nom="select ID from table1 WHERE (table1.nom like '%$mot%')";
ps : si tu utilise du table1.nom utilise le aussi la : table1.ID
cordialement
Dragondark de Lonlindil
LE POUVOIR EST NOTRE GLOIRE
LE COEUR NOTRE HONNEUR
oui, tu as raison. J'ai un peu trop simplifié ma requête dans le forum.
La requête est bien sous la forme :
$requete_nom="select table1.ID from table1 WHERE (table1.nom like '%$mot%')";
Je ne comprends pas pourquoi terminer un mot par une lettre accentuée bloque mes recherches.
Pour éviter ça, j'ai aussi cherché en supprimant tous les accents :
function stripAccents($string){ // Pour supprimer les accents
return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
$mot = stripAccents($mot_avec_accents);
$requete_nom="select table1.ID from table1 WHERE (stripAccents(table1.nom) like \"%stripAccents($mot)%\")";
Ca ne marche pas car stripAccents(table1.nom) ne semble pas pris en compte dans la requête alors que %stripAccents($mot)% fonctionne.
La requête est bien sous la forme :
$requete_nom="select table1.ID from table1 WHERE (table1.nom like '%$mot%')";
Je ne comprends pas pourquoi terminer un mot par une lettre accentuée bloque mes recherches.
Pour éviter ça, j'ai aussi cherché en supprimant tous les accents :
function stripAccents($string){ // Pour supprimer les accents
return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
$mot = stripAccents($mot_avec_accents);
$requete_nom="select table1.ID from table1 WHERE (stripAccents(table1.nom) like \"%stripAccents($mot)%\")";
Ca ne marche pas car stripAccents(table1.nom) ne semble pas pris en compte dans la requête alors que %stripAccents($mot)% fonctionne.
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
1 juin 2011 à 11:32
1 juin 2011 à 11:32
c'est normal tu essaye de mettre du php dans du SQL,
Ta table est sou quel format?
Est-ce que tu est sur d'avoir mis ces mots dans tes tables?
et met des simples cote au lieu de double pour les chaines.
essaye cela : select table1.ID from table1 WHERE (stripAccents(table1.nom) like CONVERT(_utf8 '%$nom%' USING utf8) ;
cela devrai te retourner les mots avec ou sans accents.
cité = cite = cîte = citè etc...
en gros il ne tien pas compte des accents utile pour les moteurs de recherche.
Cordialement
Dragondark de Lonlindil
Ta table est sou quel format?
Est-ce que tu est sur d'avoir mis ces mots dans tes tables?
et met des simples cote au lieu de double pour les chaines.
essaye cela : select table1.ID from table1 WHERE (stripAccents(table1.nom) like CONVERT(_utf8 '%$nom%' USING utf8) ;
cela devrai te retourner les mots avec ou sans accents.
cité = cite = cîte = citè etc...
en gros il ne tien pas compte des accents utile pour les moteurs de recherche.
Cordialement
Dragondark de Lonlindil
J'ai essayé masi ça me donne le même résultat qu'avant.
Je vais quand même essayer de creuser l'idée de la fonction convert avec le standard utf8.
Cordialement,
P421
Je vais quand même essayer de creuser l'idée de la fonction convert avec le standard utf8.
Cordialement,
P421
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
3 juin 2011 à 10:09
3 juin 2011 à 10:09
Bonjour,
ATTENTION: le script php est-il également encodé UTF8? Avez-vous bien ouvert la bdd en UTF8?
Pour tout ces problèmes d'encodage, voici quelques explications pour bien travailler en 'full-UTF8':
http://html5.immo-scope.com/index.php?page=general/applisFullUtf8
A+
ATTENTION: le script php est-il également encodé UTF8? Avez-vous bien ouvert la bdd en UTF8?
Pour tout ces problèmes d'encodage, voici quelques explications pour bien travailler en 'full-UTF8':
http://html5.immo-scope.com/index.php?page=general/applisFullUtf8
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
2 juin 2011 à 16:37
2 juin 2011 à 16:37
tu est en innodb?
Cordialement
Dragondark de Lonlindil
Cordialement
Dragondark de Lonlindil
je ne sais pas si je suis en innodb. A priori je dirai que oui.
Je suis en environnement LAMP sur mon serveur dédié et j'utilise EasyPHP sur mon PC pour tester mon site avant de le mettre en ligne.
L'interclassement pour la connexion MySQL est : utf8_general_ci
Ce qui est très bizarre est que la recherche des accents fonctionne correctement sauf si la lettre accentuée est la dernière d'un mot cherché.
J'ai trouvé une solution alternative mais pas top : j'ai créé un second champ dans ma table que j'appelle "champ_sans_accent".
Avec ma fonction stripAccents (voir plus haut dans la conversation), je rempli ce champ (phase d'initialisation).
Ensuite, lorsque je cherche un mot accentué, je le fais d'abord passer aussi par cette même fonction puis je lance la recherche.
C'est pas top, ça m'oblige à rafraîchir de temps en temps ce nouveau champ, mais ça fonctionne.
Par contre, si la recherche marchait directement avec les accents, ça me simplifierai bcp la vie !
A+,
P421
Je suis en environnement LAMP sur mon serveur dédié et j'utilise EasyPHP sur mon PC pour tester mon site avant de le mettre en ligne.
L'interclassement pour la connexion MySQL est : utf8_general_ci
Ce qui est très bizarre est que la recherche des accents fonctionne correctement sauf si la lettre accentuée est la dernière d'un mot cherché.
J'ai trouvé une solution alternative mais pas top : j'ai créé un second champ dans ma table que j'appelle "champ_sans_accent".
Avec ma fonction stripAccents (voir plus haut dans la conversation), je rempli ce champ (phase d'initialisation).
Ensuite, lorsque je cherche un mot accentué, je le fais d'abord passer aussi par cette même fonction puis je lance la recherche.
C'est pas top, ça m'oblige à rafraîchir de temps en temps ce nouveau champ, mais ça fonctionne.
Par contre, si la recherche marchait directement avec les accents, ça me simplifierai bcp la vie !
A+,
P421
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
3 juin 2011 à 10:40
3 juin 2011 à 10:40
est-ce que lors que tu fais des recherche via le moteur de recherche de phpmyadmin ça fonctionne?
si oui récupère leurs code SQL
Sinon l'idée de faire un champs sans accents est bien mais duplique la taille mémoire nécessaire pour ce que tu cherche à faire
Cordialement
Dragondark de Lonlindil
si oui récupère leurs code SQL
Sinon l'idée de faire un champs sans accents est bien mais duplique la taille mémoire nécessaire pour ce que tu cherche à faire
Cordialement
Dragondark de Lonlindil
Très bonne idée que regarder comment ils font avec le moteur de phpmyadmin car effectivement leurs recherches fonctionnent.
C'est dans la page sql.php.
Cependant, cette page utilise tellement de fonction, routines & variables pour gérer tous les cas d'une manière générale que je m'y perds.
A l'occasion j'essaierai de décortiquer leur code qui me permettra d'avoir une solution plus optimisée que celle que j'ai adoptée par duplication de la taille mémoire et par refresh batchs...
Merci pour ton aide Dragondark de Lonlindil
Cordialement,
P421
P.S. pour ceux qui rencontreraient la même difficulté que moi : dans la fonction stripAccents, j'ai ajouté à la liste des caractères définie plus haut dans la discussion un remplacement du caractère " par un espace.
C'est dans la page sql.php.
Cependant, cette page utilise tellement de fonction, routines & variables pour gérer tous les cas d'une manière générale que je m'y perds.
A l'occasion j'essaierai de décortiquer leur code qui me permettra d'avoir une solution plus optimisée que celle que j'ai adoptée par duplication de la taille mémoire et par refresh batchs...
Merci pour ton aide Dragondark de Lonlindil
Cordialement,
P421
P.S. pour ceux qui rencontreraient la même difficulté que moi : dans la fonction stripAccents, j'ai ajouté à la liste des caractères définie plus haut dans la discussion un remplacement du caractère " par un espace.
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
3 juin 2011 à 16:00
3 juin 2011 à 16:00
tu as plus simple ;)
tu regarde la requête qui est émise il te l'affiche au dessus de la réponse.
Cordialement
Dragondark de Lonlindil
tu regarde la requête qui est émise il te l'affiche au dessus de la réponse.
Cordialement
Dragondark de Lonlindil
effectivement...
Bon est bien la requête obtenue est :
SELECT * FROM 'voyage' WHERE 'nom' LIKE '%cité%' LIMIT 0 , 30
c'est à peu près ce qui devrait fonctionner sur mon moteur de recherche.
Je vais rester pour le moment sur ma solution par traitements batchs réguliers pour remplir le champ d'interrogation sans accents de ma table.
Cordialement,
P421
Bon est bien la requête obtenue est :
SELECT * FROM 'voyage' WHERE 'nom' LIKE '%cité%' LIMIT 0 , 30
c'est à peu près ce qui devrait fonctionner sur mon moteur de recherche.
Je vais rester pour le moment sur ma solution par traitements batchs réguliers pour remplir le champ d'interrogation sans accents de ma table.
Cordialement,
P421