Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

MySQL:Recherche efficace d'un mot dans une ta

JLinho, le mercredi 23 juin 2004 à 11:06:24
Salut à tous,

J'aimerais créer un petit moteur de recherche sur une Base de donnée.
Plus précisément, l'utilisateur rentre un mot et doit obtenir en retour tous les enregistrements (lignes de la table) dont un des champs ( au moins) contient le mot spécifié.

Les tables étant assez lourdes, il faut que ce soit assez efficace comme méthode. Un autre problème, c'est la casse et les accents:
Par exemple si l'utilisateur entre: "cHéVâLieR" , les enregistrements contenant la sous chaine "chevalier" ou "CHEVALIER" dans un de leurs champs doivent être détectés.
Répondre à JLinho  Signaler ce message aux modérateurs Aller au dernier message

1


  • 2
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
GallyNet, le mercredi 23 juin 2004 à 13:20:27
Pour la casse tu peut déjà utilisé l'opérateur LIKE, il te retrouvera plusieur mots sans tenir compte de la casse (majuscule et minuscule) mais je sais pas pour les voyelle avec accent.
Sinon pour la recherche je pense que ca devrait marcher:
SELCT *
FROM maTable
WHERE champ1 LIKE "%monMot%" OR champ2 LIKE "%monMot%" ...
Répondre à GallyNet

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
iBook, le mercredi 23 juin 2004 à 14:26:02
oué commence déjà par regardé la doc pour la commande "like" de mysql.
Ensuite tu peu également créer des index dans té tables et qui te permettent un gain consédérable de temps, mais sa prend aussi pas mal de mémoire sur ta bdd kan ta des grosses tables bien pleines
Répondre à iBook

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JLinho, le mercredi 23 juin 2004 à 14:58:51
Pour les accents j'ai trouvé une astuce qui consiste à remplacer dans le mot recherché tous les voyelles accentués ou non par '_' , et puis j'utilise le LIKE...Par contre ça rique de donner pas mal de résultats en trop.... ( Au lieu de chercher batîment par exemple, il va chercher
%b_t_m_nt% , la ça va....mais si je cherche roseau, ça devient carrément n'importe quoi... car on recherche %r_s_ _ _% donc on va trouver 'rasoir' ou 'arrosoir' où d'autres anneries). Enfin bon c'est pas très satisfaisant...
Alors sinon c'est vrai qu'on peut toujours filtrer les résultats en PHP, mais il faut pas que le PHP travaille sur trop d'enregistrements...

Sinon iBook, je vois pas en quoi l'utilisation des Index va considérablement améliorer la vitesse des recherches, puisqu'il s'agit de rechercher en plein milieu de certains champs certains mots...à moins que j'aie mal pigé le principe des Indexs ....
Répondre à JLinho

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ric, le jeudi 24 juin 2004 à 08:26:42
Bonjour
Ne remplace que les caractères différents des minuscules, majuscules, chiffres (en gros ceux qui ne sont pas dans l'ASCII) et ainsi roseau restera roseau et bâtiment deviendra b_timent.
Répondre à ric

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
iBook, le mercredi 23 juin 2004 à 15:25:43
ben je c pas ce que contient exactement ta bdd, mé tu peu définir des mots clés (mots les plus souvent tapé par tes visiteurs) pour caractériser un texte. Tu met un index dessus et ca peut te faire gagner en rapididé de requète, mais bon.... ca vau ce que ca vau.... tout dépend de l'utilisation exacte de ton moteur
Répondre à iBook

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
GallyNet, le mercredi 23 juin 2004 à 18:38:26
Tu peut utiliser les expressions regulieres pour le probleme avec les accents, dans le cas de" batîment":

SELECT * FROM maTable WHERE champ1 REGEXP "b[aâà]1t[îiï]m[eéè^é¨2]nt";

(pas sur du code mais il doit rssembleer a ca)
Par contre tu doit modifier le mot via t'on script (PHP ?)
Répondre à GallyNet

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
edisonn, le mercredi 23 juin 2004 à 21:29:16
Salut,

En effet la creation d'un index est une bonne chose. Tu crée un index sur le syllable les plus courantes. Par exemple, si tu cree un index pour "va", alors chevalier se trouvera dedans.
Pour les accents, tu peux dupliquer les colonnes qui contiennent des accents en colonnes sans accent, sans caracteres speciaux, sans les articles et sans la ponctuation... pour une recherche plus rapide.
Répondre à edisonn

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
iBook, le jeudi 24 juin 2004 à 08:25:53
oui ca pourrai etre une bonne idée : tu duplique la colone qui contient le texte a l'interieur duquel tu cherche tes mots (genre la colone "description" et "titre" pour un annuaire de site par exemple) et dans les colones dupliquées, tu met le meme texte, mais sans accent ni ponctuation("description_format" "titre_format" par ex.). Et pour tes recherches, ben tu cherchera directement dans le texte formaté ("description_format" "titre_format")
Répondre à iBook

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JLinho, le jeudi 24 juin 2004 à 09:41:34
Bon je devrais pouvoir m'en sortir maintenant...
Merci à tous pour votre aide !!!
Répondre à JLinho

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ludwig, le lundi 24 mars 2008 à 09:00:20
Essaye un interclassement ‘latin1_swedish_ci’ pour ta table et tes champs recherchés.
Tes requêtes ignoreront alors la casse et les accents.
Répondre à Ludwig

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 alexv, le jeudi 10 avril 2008 à 14:09:40
La meilleur des solutions est la tienne Ludwig merci du tuyau
Répondre à alexv

Résultats pour MySQL:Recherche efficace d'un mot dans une ta

PHP MySql, rechercher dans plusieurs tables (Résolu) Bonjour! Je viens de creer une base de donné avec 3 table et je veux un script qui me permet de faire une recherche dans ces 3 tables a la fois en utilisant PHP Mysql. Merci. www.commentcamarche.net/forum/affich-1029703-php-mysql-rechercher-dans-plusieurs-tables
MySQL Ajouter une table à une autre table (Résolu) Bonjour tout le monde... après recherches infructuseuses, je viens demander aide... Je cherche à copier une sélection d'une table MySQL dans une autre table qui n'est pas vide avec du code PHP. $query = "INSERT INTO table_dest SELECT * FROM... www.commentcamarche.net/forum/affich-2398798-mysql-ajouter-une-table-a-une-autre-table
Requete MySQL => tableau associatif PHP (Résolu) Bonjour, Je fais encore une fois appel a vous pour m'eclairer sur un point ! qui est de recuperer le resultat d 'une requete MySQL sous forme de tableau associatif PHP . pour exemple: soit la requete SQL suivante . $sql ="SELECT... www.commentcamarche.net/forum/affich-6043182-requete-mysql-tableau-associatif-php

Résultats pour MySQL:Recherche efficace d'un mot dans une ta

Comment utiliser efficacement les moteurs de recherche ?Comment utiliser efficacement les moteurs de recherche ? Si Internet représente une masse d'informations colossale, il peut être fastidieux de trouver le renseignement que vous recherchez. Pourtant, il est possible d’optimiser ses requêtes pour... www.commentcamarche.net/faq/sujet-9383-comment-utiliser-efficacement-les-moteurs-de-recherche
MySQL - Update avec jointureSi vous avez deux tables possédant une clé commune (dans le cas ci-dessous il s'agit de la clé primaire "id"), il est possible de mettre à jour un champ d'une des deux tables (update_table) grâce aux données de la seconde (reference_table) à l'aide... www.commentcamarche.net/faq/sujet-10426-mysql-update-avec-jointure
Import / export de données IngresIngres permet d'exporter les données d'une installation Ingres vers une autre (quels que soient l'OS cible ou source) par les commandes : unloaddb copydb Ce qui change entre ces 2 commandes c'est leur périmètre : unloaddb concerne tous... www.commentcamarche.net/faq/sujet-5470-import-export-de-donnees-ingres

Résultats pour MySQL:Recherche efficace d'un mot dans une ta

Mysql : IF EXISTS dans SELECT (Résolu)Petit soucis en mysql : j'ai une table avec une liste d'objets, une autre avec une liste de propriétés sur certains objets. Je veux pouvoir tout récupérer lors d'une requête, même les objets n'ayant pas de propriétés. Je veux faire... www.commentcamarche.net/forum/affich-3027985-mysql-if-exists-dans-select
Fichier de commande mysql (Résolu)Salut a tous, J'ai un fichier texte qui contient des commandes mysql : USE CONTACTS; CREATE TABLE IF NOT EXISTS noms ( idnom INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, nom VARCHAR(40) NOT NULL, prenom VARCHAR(40), description TEXT ); CREATE TABLE... www.commentcamarche.net/forum/affich-3959586-fichier-de-commande-mysql

Résultats pour MySQL:Recherche efficace d'un mot dans une ta

SQL - Création de vuesQu'est-ce qu'une vue? Une vue est une table virtuelle, c'est-à-dire dont les données ne sont pas stockées dans une table de la base de données, et dans laquelle il est possible de rassembler des informations provenant de plusieurs tables. On parle... www.commentcamarche.net/contents/sql/sqlview.php3
Le langage SQLQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,... www.commentcamarche.net/contents/sql/sqlintro.php3