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 :

svp corrigez moi cette petite requête avec 1 paramètre


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 104
    Par défaut svp corrigez moi cette petite requête avec 1 paramètre
    Bonjour

    La requête suivante est la transformation par moi qui ne connait pas le sql, d'une autre que l'on m'avait donné ici, dans le but de selectionner les enregistrements avec le nom d'un dossier, en puisant sur 2 champs de la table Films , la premiere condition avec seulement une valeur excte possible (donc =) et la seconde avec valeur exacte possible mais possible aussi contenu (debut milieu ou fin)
    Et cest là mon probléme. Il ne me donne, pour ce second champs, que les enregistrements exactement = et pas ceux où le nom recherché est partagé avec d'autres dossiers.
    Que me manque t'il?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [QuelDossier] Text ( 255 );
    SELECT *
    FROM films
    WHERE films_dossier=[QuelDossier] OR films_genre LIKE [QuelDossier] ;
    Donc, visiblement, LIKE ne convient pas ... ?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 355
    Par défaut
    Bonjour,
    Quelle est la valeur du paramètre passé à la requête ?
    Est-ce qu'elle contient bien des jockers (% et/ou _) ? Si ce n'est pas le cas, le LIKE se comporte comme un =.

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 514
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Vous utilisez la même valeur de paramètre contenue dans "QuelDossier" pour rechercher sur le critère dossier et le critère genre...

    Fonctionnellement, si le besoin est de rechercher :
    • soit les films contenus dans tel dossier (dossier films d'horreur par exemple)
    • soit les films de tel genre (genre épouvante par exemple)


    Alors il faut deux paramètres distincts.

    Ensuite, la requête ressemblera à quelque chose comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set @param_dossier = 'dossier horreur' ;
    set @param_genre   = 'epouvante' ;
    SELECT colonne1
         , colonne2
         , [...]
         , colonnen
    FROM   films
    WHERE  films_dossier = @param_dossier
       OR  films_genre   = @param_genre
    ;

    Si l'on veut faire une recherche sur un contenu partiel il faut utiliser l'opérateur like
    Pour ce besoin, on alimentera la variable concernée ainsi set @param_titre = '%poursuite%' pour trouver tous les titres contenant 'poursuite'
    Puis on codera la requête de cette façon :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT colonne1
         , colonne2
         , [...]
         , colonnen
    FROM   films
    WHERE  films_titre like @param_tire
    ;

    Attention toutefois aux performances : avec l'opérateur LIKE, une recherche des chaînes de caractères commençant par peut être performante (ex : like 'poursuite%', par contre, une recherche terminant par (like '%poursuite') ou incluant (like '%poursuite%' ne sera pas indexable et donc très lente si la table est fortement chargée.

    Attention aussi à ne pas utiliser SELECT *, les raisons en sont expliquées

    Pour vous former au SQL , il existe des tutos dans ce forum,
    voyez ICI

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 104
    Par défaut
    Eh beh, moi qui m'attendais à un tout petit changement de formule ...

    Merci messiers (dames) pour vos reponses.
    Je n'ai rien compris au premier message. Pour le second ... visiblement, j'ai besoin de préciser mes besoins.

    Le champs films_dossier ne peut contenir qu'un seul nom car c'est là où est LE fichier video du film.
    Le second champs , mal appelé films_genre contient en fait les dossiers où il y a un raccourci. En fait ce champs devrait s'appeler genre dossiers secondaires.
    Ce champs contient les dossiers où le film - le fichier video - aurait pu également être , mais, bien, sur, pour ne pas avoir deux fois le fichier video lourd, je ne mets que les raccourcis. Ainsi ce second champs peut contenir plusieurs dossiers

    Exemple Le film "retrour vers l'enfer" est dans le dossier War, mais contient des raccourcis dans le dossier Orient et dans le dossier Amerique. Le champs films_genre contient donc "Amerique Orient" et le premier, films_dossier, contient "War"

    Ainsi quand je tape la valeur War je devrais trouver tous les films dont le dossier video (champs film_dossier) est contenu dans War (comme Retour vers l'enfer), mais, du coups, le champs films_genre est plus compliqué car je dois y trouver les enregistrements qui ne contiennent que "War", donc un seul autre dossier (et un seul raccourci), en l'occurrence dans le dossier "War". Mais je veux aussi pouvoir y trouver les entrées genre "war Amerique" ou "Orient War Amerique" etc ...

    Donc, pour resumer, impossible de trouver plusieurs dossiers dans le champs films_dossier mais possible dans le champs films_genre. Bien sur, toutes les entrees ne peuvent contenir que des noms de dossiers qui existent.

    Ainsi, peut être quelqu'un a t'il une autre idee ... comme par exemple créer plusieurs champs, genre films_dossier2, films dossier3 etc ... ?

    Ou sinon arriver à modifier le code sql pour également accepter quand le champs films_genre contient plusieurs dossiers , dont celui qu'on cherche au milieu (ou fin ou debut), en l'occurrence ma demande initiale, qui peut changer en fonction ds conseils qu'on me donnera.


    PS j'ai bien sûr déja regarder des tuto pour essayer de passer de ce mode "champs entier" à "n'importe où dans le champs", je n'ai pas trouvé la solution.

  5. #5
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 934
    Par défaut
    Citation Envoyé par Youssou06 Voir le message
    Eh beh, moi qui m'attendais à un tout petit changement de formule ...
    le langage SQL n'est pas sorti d'un grimoire, point de "formules" ici

    Dans le code proposé il y a 2 éléments dissociés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS [QuelDossier] Text ( 255 );
    déclaration d'une variable au nom de [QuelDossier] qui recevra la valeur demandée/saisie lors de l'exécution

    et le code purement SQL (mis en évidence par Escartefigue )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM   films WHERE  films_dossier=[QuelDossier];
    Le cœur de l'exécution est la requête SQL.
    la clause SELECT liste les colonnes qui seront retournées
    La clause FROM liste la/les sources
    La clause Where représente la conditionnelle ; si vraie lors de l'évaluation, la ligne candidate va servir à alimenter la projection

    donc si on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from films where 1=1 ;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from films where 1=2 ;
    on ne devrait pas avoir le même nombre de lignes (sauf si la table films est vide ...)

    sur la lancée on peut aussi écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM   films WHERE  films_dossier='A14'
    pour peu qu'un film_dossier au nom de A14 existe

    Si c'est vrai alors on peut utiliser l'opérateur LIKE qui admet l'utilisation de jokers (% par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM   films WHERE  films_dossier like 'A14'
    reverra la même liste que la rq précedente
    alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM   films WHERE  films_dossier like 'A%'
    retournera la liste dont les film_dossier commencent par A

    Bref, il faut "coder" son besoin

    Au sujet des formations SQL :
    Je suis étonné que SQLpro n'ai pas déjà mis un lien vers ses, excellents, cours.
    Le lien donné par Escartefigue n'est pas à exclure non plus

    Vous pouvez aussi nous dire ce que vous voulez atteindre et quelles sont les informations dont vous disposez pour y parvenir ; peut être qu'ensemble on trouvera une solution à un instant T - ce qui vous évitera d'avoir à apprendre le langage SQL
    Le savoir est une nourriture qui exige des efforts.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Je pense qu'il suffit de rajouter %.
    Un % avant la chaine recherchée pour ne pas tenir compte de ce qu'il y a avant, et un % après pour ne pas tenir compte de ce qu'il y a après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PARAMETERS [QuelDossier] Text ( 255 );
    SELECT *
    FROM films
    WHERE films_dossier=[QuelDossier] OR films_genre LIKE %[QuelDossier]% ;

  7. #7
    Membre averti
    Homme Profil pro
    Musicien
    Inscrit en
    Juillet 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Juillet 2024
    Messages : 12
    Par défaut
    Waow, trop super, tout cela. Grand merci à Michel.priori pour ses efforts pour expliquer au super debutant que je suis .
    Cependant, il subsiste quelques mysteres dans ce parler pourtant "à portée" ... genre :
    si vraie lors de l'évaluation, la ligne candidate va servir à alimenter la projection
    Merveilleux, on croirait parler avec Gandalf !!!

    Vous pouvez aussi nous dire ce que vous voulez atteindre et quelles sont les informations dont vous disposez pour y parvenir ; peut être qu'ensemble on trouvera une solution à un instant T - ce qui vous évitera d'avoir à apprendre le langage SQL
    Aïe .. je croyais avoir été clair ... snif.
    En effet, mon but n'est pas d'apprendre le sql mais juste d'ameliorer ma petite bdd de films.
    Pour l'heure je pars demain pour au moins deux mois loin de France. En général, une fois mon repere français quitté, je m'emm ... moins et je ne travaille plus cette bdd .. que je reprends à mon retour etc ... Mais , pour encore quelques heures, j'aimerais bien arriver à mon objectif immediat de créer une bonne recherche des films en fonction des dossiers, et donc completer cette ... "formule" (lol)

    Alors, pour repondre aussi à Skuatamad , je ne crois pas pouvoir mettre ce .. joker .. avec les []me semble t'il. En tous cas j'avais essayé quelque chose genre :

    LIKE %[QuelDossier]

    Et un message d'erreur (de syntaxe ou de code ... ou autre ... ) en a été le resultat

  8. #8
    Membre averti
    Homme Profil pro
    Musicien
    Inscrit en
    Juillet 2024
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Musicien

    Informations forums :
    Inscription : Juillet 2024
    Messages : 12
    Par défaut
    Reponse à skuatamad

    Je me suis rappélé que tu avais proposé le code

    Pas de messages d'erreur. La "formule", enfin, le code, est "grammaticalement" (sic ... ) juste. Mais c'est toujours pas le but recherché. Je n'ai, pour le champs films_genre (qui devrait s'appeler Dossiers secondaires comme je l'ai bien précisé) que les enregistrements "champs entier" et pas "n'importe où dans le champs"
    C'est d'autant plus frustrant que c'est exactement ce que fait la recherche où on précise cela. Mais là, sur deux colonnes, une "champs entier" et l'autre non, et c'est le .......

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 982
    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 982
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Cyril03 Voir le message
    Reponse à skuatamad

    Je me suis rappélé que tu avais proposé le code

    Pas de messages d'erreur. La "formule", enfin, le code, la requête est "grammaticalement" (sic ... ) juste. Mais c'est toujours pas le but recherché. Je n'ai, pour le champs la colonne films_genre (qui devrait s'appeler Dossiers secondaires comme je l'ai bien précisé) que les enregistrements lignes "champs entier" et pas "n'importe où dans le champs"
    C'est d'autant plus frustrant que c'est exactement ce que fait la recherche où on précise cela. Mais là, sur deux colonnes, une "champs entier" et l'autre non, et c'est le .......
    Adoptez le bon vocabulaire SVP sinon on ne vous comprendra pas....

    Pour apprendre le langage SQL, mon livre : https://sqlpro.developpez.com/livre/...le-langage-sql

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 934
    Par défaut
    re,

    Quel est le SGBD utilisé ?
    Le savoir est une nourriture qui exige des efforts.

Discussions similaires

  1. aidez moi svp à créer une petite application sous VB 2008
    Par delphibr dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/04/2009, 09h44
  2. Réponses: 2
    Dernier message: 05/08/2008, 12h00
  3. Expliquez moi cette méthode SVP
    Par specsy dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 01/05/2008, 19h22
  4. Petit probleme avec le XML svp
    Par Veler dans le forum VB.NET
    Réponses: 17
    Dernier message: 09/01/2008, 16h01

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