effectuer une recherche dans ma base

Eléphant du PHP | 248 Messages

12 déc. 2008, 10:09

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

Code : Tout sélectionner

WHERE societe LIKE '%l\'heritage%'
ou

Code : Tout sélectionner

WHERE societe="l\'heritage"
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

Invité
Invité n'ayant pas de compte PHPfrance

12 déc. 2008, 21:38

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.

Eléphant du PHP | 248 Messages

12 déc. 2008, 22:21

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

Petit nouveau ! | 6 Messages

15 déc. 2008, 10:57

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

Eléphant du PHP | 422 Messages

15 déc. 2008, 12:16

@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.

Eléphant du PHP | 248 Messages

16 déc. 2008, 02:05

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

Eléphant du PHP | 217 Messages

16 déc. 2008, 07:42

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.