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 :

La meilleur facon de faire un recherche sur plusieurs table et plusieurs terme


Sujet :

Langage SQL

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut [resolu] La meilleur facon de faire un recherche sur plusieurs table et plusieurs terme
    Bonjour,

    je fais actuellement un outils de recherche en utilisant une table article qui dispose de 3 champs
    [titre] [liens] [description]

    La reponse doit s'effectuer selon les priorites suivantes :
    - le titre
    - le liens
    - la description

    Je procede de la maniere suivante :

    tous les termes associe sont dans query
    Je recupere aussi chaque terme separement et je les mets dans un tableau:
    query;
    querytab[];

    ma requete :
    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
    select article_id, article_titre, article_lien, article_description
    from article
    where article_title ilike '%" + query + "%'
    union
    select article_id, article_titre, article_liens, article_description
    from article
    where article_lien ilike '%" + query + "%'
    union
    select article_id, article_titre, article_liens, article_description
    from article
    where article_description ilike '%" + query + "%'
    union
     
    debut boucle
     
    select article_id, article_titre, article_liens, article_description
    from article
    where article_title ilike '%" + querytab[i] + "%' or article_lien ilike '%" + querytab[i] or article_description ilike '%" + querytab[i] 
    i++;
    fin boucle
    Voila, pour donner une idee. Et j'aimerais savoir si ma requete est efficace ou si ya mieux, parceque ca avec plus de 3 termes ca devient tres lent.

    bdd = postgres pour 39000 entrees.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Le propre d'un SGBD relationnel, c'est de pouvoir faire des jointures dans les requêtes.
    Place le résultat de tes saisies de critères dans une petite table (un critère par ligne) et effectue une jointure avec la table article...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT article_id, article_titre, article_lien, article_description
    FROM article
        INNER JOIN critere
             ON article.article_title LIKE '%' || critere.saisie || '%'
    Toutefois les performances ne seront jamais époustouflantes tant donné qu'aucun index ne pourra être utilisé avec LIKE '%xxxx'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut
    OK.
    Mais je viens de comprendre pourquoi c'etait si lent.
    En fait je fais un count avant pour pourvoir faire la pagination.
    Mais le count sous postgres, c'est pas ce qu'il ya de plus rapide (cf leur doc).

    Je vais donc passer a mysql et myisam. J'ai pas besoin de l'integrite referencielle.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut
    Je reposte juste pour dire que 7 jours d'utilisation intensif de mysql, ben je suis revenu a postgres.

    J'ai finalement opte pour une recherche fulltext avec tsearch2 et la vitesse est plus que convenable

    Je n'utilise plus le count(*) qui faisait perdre du temps.

    Et mysql n'arrivais pas a gerer des insertions en masse, beaucoup d'insertions etaient ignores.

    ps : on fait commenbt pour mettre le tag [resolu] ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] comment faire pour rechercher sur une table ?
    Par Kalem dans le forum VBA Access
    Réponses: 8
    Dernier message: 10/04/2012, 09h33
  2. Comment faire la recherche sur les tables
    Par teZone dans le forum WinDev
    Réponses: 4
    Dernier message: 23/10/2007, 15h36
  3. Réponses: 19
    Dernier message: 12/04/2007, 15h11
  4. faire une recherche sur des "
    Par richard038 dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/07/2006, 22h30

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