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 :

Besoin d'aide sur un script SQL de recherche


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut Besoin d'aide sur un script SQL de recherche
    Bonjour,

    Je suis sur le developpement d'un site web qui references des documents (titre, resume, mot cle, thesaurus,...) et j'ai recuperé des script un peu partout pour realiser cette requete. Mes objectifs sont multiples :
    1) Eviter la case et les accents
    2) Recherche dans les tables de correspondance mot cle et thesaurus
    3) Classer par date (champ datedoc)
    4) Prendre uniquement les references entre le numéro a et le numéro b (un genre de limite, mais je sais pas ou le mettre)
    5) Eviter les doublon.

    C'est beaucoup je sais, mais si je pouvais m'en approcher un maximum se serai le paradis ici
    Voici la requete que je genère pour la recherche du mot toto :
    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
     
    select documentsactifs.numdoc from documentsactifs where (to_ascii(documentsactifs.titre,'LATIN1') like '%toto%')
    union
    select documentsactifs.numdoc from documentsactifs where (to_ascii(documentsactifs.soustitre,'LATIN1') like '%toto%')
    union
    select documentsactifs.numdoc from documentsactifs where (to_ascii(documentsactifs.sujet,'LATIN1') like '%toto%')
    union
    select documentsactifs.numdoc from documentsactifs where (to_ascii(documentsactifs.resume,'LATIN1') like '%toto%')
    union
    select documentsactifs.numdoc from documentsactifs where (to_ascii(documentsactifs.notelibre,'LATIN1') like '%toto%')
    union
    select distinct t.numdoc
    from   documentsactifs t join correspond d on t.numdoc = d.numdoc
    join motclelibre m on d.nummotcle = m.nummotcle
    where  m.nommotcle in ('toto')
    group  by t.numdoc
    having count(*) >= 1
    union
    select distinct t.numdoc
    from   documentsactifs t join trouve d on t.numdoc = d.numdoc
     
    join champthesaurus m on d.numchampthesaurus  = m.numchampthesaurus
    where  m.terme in ('toto')
    group  by t.numdoc
    having count(*) >= 1
    Je suis sous postgres et ma base et codé en UNICODE.

    Que dois je changer pour atteindre mes objectifs?

    Merci

  2. #2
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    En testant sur different mot, je crois que la fonction to_ascii ne marche pas...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 861
    Points : 53 005
    Points
    53 005
    Billets dans le blog
    6
    Par défaut
    to_ascii est une fonction spécifique à oracle.
    Voici une requête plus normative. Mais je pense qu'il n'est pas nécessaire d'utiliser la clause COLLATE. Essaye sans.

    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
    SELECT numdoc 
    FROM   documentsactifs 
    WHERE  titre     LIKE '%toto%' COLLATE 'LATIN1'
       OR  soustitre LIKE '%toto%' COLLATE 'LATIN1'
       OR  sujet     LIKE '%toto%' COLLATE 'LATIN1'
       OR  resume    LIKE '%toto%' COLLATE 'LATIN1'
       OR  notelibre LIKE '%toto%' COLLATE 'LATIN1'
    UNION
    select DISTINCT t.numdoc
    from   documentsactifs t 
           INNER JOIN correspond d 
                 ON t.numdoc = d.numdoc
           INNER JOIN motclelibre m 
                 ON d.nummotcle = m.nummotcle
    WHERE  m.nommotcle = 'toto'
    GROUP  BY t.numdoc
    HAVING COUNT(*) >= 1
    UNION
    SELECT DISTINCT t.numdoc
    FROM   documentsactifs t 
           INNER JOIN trouve d 
                 ON t.numdoc = d.numdoc
           INNER JOIN champthesaurus m 
                 ON d.numchampthesaurus  = m.numchampthesaurus
    WHERE  m.terme = 'toto'
    GROUP  BY t.numdoc
    HAVING COUNT(*) >= 1
    A +

  4. #4
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    Merci, j'ai tester et la requete passe (sans COLLATE dommage, quand je cherche titre et que dans la base c'est titré, il trouve pas...) Sinon si je veux trier mon resultat par "datedoc" et recuperer les document compris entre a et b, ou je met le LIMIT et le DESC?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 861
    Points : 53 005
    Points
    53 005
    Billets dans le blog
    6
    Par défaut
    pas compris ... ?
    Quel SGBDR ???

    A +

  6. #6
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    euhhh...J'utilse Postgresql.. ça répond as tu question???

Discussions similaires

  1. Besoin d'aide sur une requete sql
    Par Neo57 dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/01/2010, 15h43
  2. besoin d'aide sur un fichier sql
    Par team94 dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/08/2008, 17h11
  3. besoin d'aide sur programme en sql 3
    Par abdel54 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/12/2005, 09h19
  4. besoin d'aide sur une requette sql
    Par maxidoove dans le forum Langage SQL
    Réponses: 13
    Dernier message: 10/10/2005, 18h42

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