IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête de recherche générale (moteur de recherche) dans une base de données


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut Requête de recherche générale (moteur de recherche) dans une base de données
    Bonjour,

    Excusez moi de vous déranger, mais est-il possible de créer une requête SQL permettant à partir d'un mot de le rechercher dans toute les tables et colonnes d'une base de données (comme un moteur de recherche), s'il vous plaît ?

    Exemple :

    Mot recherché : TOTO

    requête SQL : select * from all table where ? = TOTO ;
    En vous remerciant.

    Bonne journée.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    En SQL je ne pense pas!

    En revanche il y a ce projet : http://code.google.com/p/anywhereindb/

  3. #3
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Je vous remercie de m'avoir répondu.

    J'ai jeté un coup d'oeil à votre lien http://code.google.com/p/anywhereindb/, cependant c'est pour du code PHP et une base de données MYSQL alors que je travaille en C#, et que ma base de données se situe dans un fichier .xsd.

    Pour ce qui est de la base de données je ne peux hélas la fournir, car ce n'est pas un sujet personnel, mais professionnel.

    Y aurait-il alors une autre solution, s'il vous plaît ?

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Oui il y a une solution mais assez longue!

    En C:
    _ Récupérer l'ensemble des noms de table de votre base
    _ Puis, grace à ceci, pour chaque table, récupérer les noms de tous champs
    _ Enfin, pour chaque champ de chaque table, rechercher le mot!

    Ceci ressemblerai à l'algorithme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    tables <- toutes les tables
    pour tables faire
    {
    	champs <- touts les champs de la table courante
    	requete <- "SELECT * FROM " + table courante + " WHERE";
    	pour champs faire
    	{
    		si ce n est pas le premier passage dans la boucle
    		{
    			requete <- requete + " AND";
    		}
    		requete <- champ courant + " = '" + mot + "'"
    	}
    }

  5. #5
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Je vous remercie de votre réponse.

    Je vais essayer cela au plus tôt.

    Je vous dirais si cela aura eu le résultat escompté.

    Merci bien.

  6. #6
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Tu peux interroger le catalogue information_schema (vue COLUMNS) pour avoir le nom de toutes les tables et de toutes les colonnes. Ensuite, selon le principe donné par mon prédécesseur, tu crées dynamiquement les requêtes qui utilisent le résultat de l'interrogation du catalogue.

    Ceci dit, je ne vois pas l'intérêt de chercher "toto" dans une colonne de type numérique ou date. Alors tu peux aussi récupérer dans le catalogue le type de la colonne (DATA_TYPE) et ajouter un test dans ton programme pour éviter d'interroger inutilement ces colonnes.

  7. #7
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Merci pour votre remarque j'en prends bonne note.

  8. #8
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    je t'ai preparé un petit programme en pl/sql sous Oracle qui repond à ton besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    create or replace procedure z_toto is
      V_Ligne varchar2(400);
      trouve  varchar2(400);
      find    varchar2(100);
      TYPE REFCUR1 IS REF CURSOR;
      cur  REFCUR1;
      cur2 REFCUR1;
     
    begin
      Open cur For
        select 'select ' || COLUMN_NAME || ' from ' || owner || '.' ||
               TABLE_NAME || ' where upper(' || COLUMN_NAME ||
               ') like upper(''%TO%'')'
          from all_tab_columns t
         where data_type like 'VARCHAR%';
     
      Loop
        Fetch cur
          Into V_Ligne;
        Exit when cur%NOTFOUND;
     
        begin
          Open cur2 For V_Ligne;
     
          Loop
            Fetch cur2
              Into trouve;
            Exit when cur2%NOTFOUND;
            --traitement
            if trouve is not null then
              dbms_output.put_line(trouve);
            end if;
     
          End loop;
          Close cur2;
        exception
          when others then
            null;
        end;
     
      End loop;
      Close cur;
     
    end z_toto;

  9. #9
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Merci bien.

  10. #10
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Ceci dit, je ne vois pas l'intérêt de chercher "toto" dans une colonne de type numérique ou date. Alors tu peux aussi récupérer dans le catalogue le type de la colonne (DATA_TYPE) et ajouter un test dans ton programme pour éviter d'interroger inutilement ces colonnes.
    Je dirais même je ne vois pas l'intêret tout court?

    Quelle est votre besoin, je ne vois pas ce qui pourrait vous amener a chercher un mot dans n'importe qu'elle table...

  11. #11
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Je dirais même je ne vois pas l'intêret tout court?

    Quelle est votre besoin, je ne vois pas ce qui pourrait vous amener a chercher un mot dans n'importe qu'elle table...
    Hé bien, l'on m'a demandé de faire un moteur de recherche dans une application.
    C'est à dire une fonction "Recherche" qui doit chercher dans toute les rubriques de l'application le mot recherché.

Discussions similaires

  1. rechercher et remplacer un caractere dans une base de données
    Par trialrofr dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/01/2009, 11h07
  2. [Recherche] script gestion de mails dans une base de données
    Par emilie13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/06/2007, 16h59
  3. Recherche dans une base de donnée
    Par genova dans le forum SQLite
    Réponses: 8
    Dernier message: 29/09/2005, 00h16
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 07h47
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo