Page 1 sur 1
effectuer une recherche dans ma base
Posté : 12 déc. 2008, 10:09
par moileraz
Bonjour,
j'utilise la version 5.0.27 de mysql.
Dans ma base j'ai un champs société qui contient une donnée de type
l\'heritage
lorsque j'effectue une requête du genre
ou
cela ne me retourne rien.
J'ai meme essayé dans phpMyadmin mais lui non plus n'arrive pas à retourner quelques choses
Merci de votre aide
Posté : 12 déc. 2008, 21:38
par Invité
Dans l'exemple donné, c'est peut-être simplement l'accent aigue qui manque.
Pour tester dans PhpMyAdmin, fais-tu des requêtes dans la fenêtre MYSQL ou fais-tu des recherches avec l'outil de recherche? Privilégie le second cas, tu pourras alors récupérer des requêtes toutes faites après traitement donnant de bons résultats.
Posté : 12 déc. 2008, 22:21
par moileraz
J'ai utilisé la fonction recherche. Enfait j'ai pas d'accent aigue mais meme phpMyadmin me dit qu'il n'y a pas de resulta
j'y comprend plus rien
Réponse à votre problème
Posté : 15 déc. 2008, 10:57
par moka2203
Bonjour,
Il existe plusieurs façons pour effectuer une recherche dans une base de données, la plus correcte c'est l'indexation des champs en full text (une icone qui se trouve à droite de chaque champ créer)
et l'utilisation de MATCH... AGAINST(). Sans oublier de définir la table en MyISAM sinon ça ne fonctionne pas ( pas en InnoDB)
Cette fonction MySQL remplace LIKE '%xxxx%' et elle est plus pertinente.
Exemple :
Si tu veux rechercher un mot dans une table, habituellement, tu écris :
SELECT * FROM `table` WHERE __CHAMP__ LIKE '%__MOT__%'
Si tu as 2 mots tu complique encore plus ta requête et tu risque de ne pas avoir de résultat!
Avec MATCH AGAINST(), le probleme est résolu !
Tu écris ceci :
SELECT * FROM `table` WHERE MATCH (titre,body) AGAINST ('_MOTS_RECHERCHES_');
ICI tu recherche _MOTS_RECHERCHES_ dans "table" et qui existe dans les champs titre et body. C'est à dire que les mots peuvent ne pas exister côte à côte, mais le résultat est retourné.
Je pense que c'est la réponse à ta question.
Une autre idée, il faut pensé à créer des champs Tags pour rechercher aussi dans les tags, car il se peut qu'un article parle de quelque chose et que ce mot n'est pas évoqué dans l'enregistrement, tu ne perd pas donc de résultats!
Ce qui te reste à faire c'est de faire des tests avec ta propre table et voir ce que ça donne, n'oublies pas de te documenter encore plus à propos de la fonction MATCH AGAIST de MYSQL
Posté : 15 déc. 2008, 12:16
par caroube
@moileraz
C'est quoi le problème ? C'est le LIKE qui ne fonctionne pas ? C'est à cause de l'apostrophe ? C'est à cause des accents ? C'est quoi une donnée de type "l'heritage" ? Elle contient exactement cette chaîne ou c'est juste un extrait ?
Bref, ta question est un peu floue et donc tu remarqueras que les réponses le sont aussi.
Posté : 16 déc. 2008, 02:05
par moileraz
Bonjour,
Moka 2203 > J'ai testé MATCH AGAINST mais sans succès
Caroube > Le problème est que dans ma base de donnée j'ai 4 champs id, groupe, nom, prenom. Dans le champs groupe, j'ai ces informations:
Nom Prenom 1: l\'heritage,golf,spa
Nom Prenom 2: l\'heritage,boat house
Nom Prenom 3: l\'heritage,cuisine
Ce que je veut faire c'est d'afficher le nom des personnes si dans le champs groupe il y a l'héritage. Lorsque j'effectue une recherche avec LIKE j'ai aucune info qui retourne
Merci d'avance pour ton aide
Posté : 16 déc. 2008, 07:42
par mojorisin
Bonjour,
quand tu affiches les champs via phpmyadmin et que l'entrée que tu souhaites récuperer s'affiche telle que tu nous l'as dis (ie l\'heritage) c'est sans doute que le backslashe à été doublé lors de l'enregistrement. Essais d'effectuer une recherche avec champ="l\\'heritage" pour voir si tu arrives à ressortir ton enregistrement.