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 SQL moteur de recherche


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Points : 64
    Points
    64
    Par défaut Requête SQL moteur de recherche
    Bonjour,

    J'ai construit un mini moteur de recherche dans mon application Web. Ce moteur de recherche exécute une requête contenant la chaîne de caractères entrées par l'utilisateur comme condition. Voici mon problème :

    Lorsque la page s'ouvre, tous les résultats de la base de données sont affichés via cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT commande, fournisseur, date_com FROM phie_reliquat  WHERE reliquat= 1 ORDER BY date_com
    Et je voudrais que la chaîne de caractères définissant la recherche soit recherchée pour les 3 champs : commande, fournisseur, date_com.

    Alors j'arrive à l'effectuer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT commande, fournisseur, date_com 
    FROM phie_reliquat 
    WHERE commande LIKE \'%' . safe( $_POST['search'] ) . '%\'
    OR fournisseur LIKE \'%' . safe( $_POST['search'] ) . '%\'
    OR date_com LIKE \'%' . safe( $_POST['search'] ) . '%\'
    ORDER BY date_com
    Cependant, je ne sais pas comment y inclure ma condition "WHERE reliquat= 1". Il me faudrait tous les résultats ayant le champ reliquat à 1 et contenant les caractères de la recherche dans au moins un seul des trois champs..

    Voilà, je ne sais pas si c'est possible mais j'espère vivement car là je bloque complètement..

    Merci beaucoup d'avance à vous tous!

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tout simplement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT commande, fournisseur, date_com 
    FROM phie_reliquat 
    WHERE reliquat = 1 
        AND
        (
            commande LIKE \'%' . safe( $_POST['search'] ) . '%\'
            OR fournisseur LIKE \'%' . safe( $_POST['search'] ) . '%\'
            OR date_com LIKE \'%' . safe( $_POST['search'] ) . '%\'
        )
    ORDER BY date_com
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je ne suis pas un as en sql.

    reliquat= 1 AND
    a+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT commande, fournisseur, date_com 
    FROM phie_reliquat 
    WHERE 
    reliquat= 1
    AND 
    commande LIKE \'%' . safe( $_POST['search'] ) . '%\'
    OR fournisseur LIKE \'%' . safe( $_POST['search'] ) . '%\'
    OR date_com LIKE \'%' . safe( $_POST['search'] ) . '%\'
    ORDER BY date_com

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 146
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Tout simplement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT commande, fournisseur, date_com 
    FROM phie_reliquat 
    WHERE reliquat = 1 
        AND
        (
            commande LIKE \'%' . safe( $_POST['search'] ) . '%\'
            OR fournisseur LIKE \'%' . safe( $_POST['search'] ) . '%\'
            OR date_com LIKE \'%' . safe( $_POST['search'] ) . '%\'
        )
    ORDER BY date_com
    Merci beaucoup, c'est exactement ça! La deuxième solution de kvkylian ne fonctionne elle pas.

    Merci et à bientôt!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 23
    Points
    23
    Par défaut
    Tu peux également te renseigner sur l'utilisation d'une recherche en Full-Text, qui contient des optimisations et te permet directement d'avoir une idée de la pertinence de ta recherche.

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par yeste64 Voir le message
    La deuxième solution de kvkylian ne fonctionne elle pas.
    A cause de la priorité entre les opérateurs AND et OR... Ils sont de même niveau de priorité...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Les niveaux de priorité des opérateurs logiques AND et OR sont différents.
    AND passe avant OR (comme * passe avant + dans un calcul).

    L'expression a AND b OR c ou c OR a AND b sera toujours évaluée (a AND b) OR c.

    Si l'on souhaite un fonctionnement différent, il est indispensable de mettre des parenthèses autour de l'expression à évaluer en premier.

    Cette règle n'est pas propre à Oracle ni à SQL mais se retrouve dans la grande majorité des langages de programmation.
    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.

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

Discussions similaires

  1. [Vba,RecordSet,SQL]Moteur de recherche plus rapide?!
    Par omegabahamut dans le forum Access
    Réponses: 2
    Dernier message: 25/02/2007, 21h18
  2. [SQL] Moteur de recherche ultra simple ?
    Par Jiraiya42 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 12/10/2006, 18h03
  3. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27
  4. Réponses: 21
    Dernier message: 01/03/2006, 23h15

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