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 :

[MySQL] Requete LIKE


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Points : 95
    Points
    95
    Par défaut [MySQL] Requete LIKE
    Salut,
    Je ne trouve vraiment pas de solution ace ptit probleme.
    Voila j'ai repris une base de donne qui contien entre autre les tables suivante:
    -Parametres
    • id
    • nom

    -ParametresValue
    • id
    • Value
    • idParametre

    -Annonces
    • id
    • Titre
    • Message
    • . . . .

    Dans la table Parametres j'ai une ligne contenant les valeure suivantes:
    id=10 nom=MotsInterdits
    Et dans la table ParametresValues j'ai ces lignes là:
    id=21 Value=ME**** idParametre=10
    id=22 Value=PU**** idParametre=10
    . . . . . . .
    id=75 Value=FU**** idParametre=10
    Vous avez compris que c'est un listing de gros mots. Je dois par une requete recuperer les Annonces contenant un ou plusieur gros mots dans le champs Message.
    j'ai fais cela mais ça ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT Annonces.id
    FROM Annonces, Parametres, ParametresValue
    WHERE ParametresValue.idParametre=Parametres.id
    AND Parametres.nom='MotsInterdits'
    AND Annonces.Message LIKE '%'+ParametresValue.Value+'%'
    Je suis nouveau dans le monde SQL...
    Un peu d'aide...?
    Merci...

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Brut de pomme sans explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT Annonces.id
          FROM Annonces
      left join Parametres       on Parametres.nom='MotsInterdits'
     right join ParametresValue  on ParametresValue.idParametres = Parametres.id AND uppercase(Annonces.Message) LIKE '%'+uppercase(ParametresValue.Value)+'%'

    allez une ptite explication.

    Une jointure gauche pour prendre tous les parmètres
    une jointure droite pour exclure les enreg correspondant

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Les jointures droite et gauche ne sont opportunes ici.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    '%'+ParametresValue.Value+'%' serait correct dans SQL Server. Mais en MySQL, cela s'écrit comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT('%', ParametresValue.Value, '%')
    Au passage, en SQL normalisé ou en Oracle, ce serait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '%' || ParametresValue.Value || '%'
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Yurck
    Bonjour,

    Brut de pomme sans explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT Annonces.id
          FROM Annonces
      left join Parametres       on Parametres.nom='MotsInterdits'
     right join ParametresValue  on ParametresValue.idParametres = Parametres.id AND uppercase(Annonces.Message) LIKE '%'+uppercase(ParametresValue.Value)+'%'

    allez une ptite explication.

    Une jointure gauche pour prendre tous les parmètres
    une jointure droite pour exclure les enreg correspondant

    a+
    J'ai essayé avec ton code ça me donne une ligne en plus avec id=NULL, par contre avec ce code là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT Annonces.id
          FROM Annonces
      left join Parametres       on Parametres.nom='MotsInterdits'
      join ParametresValue  on ParametresValue.idParametres = Parametres.id AND uppercase(Annonces.Message) LIKE '%'+uppercase(ParametresValue.Value)+'%'
    ca marche nickel...
    Merci, surtout pour l'explication

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Antoun
    '%'+ParametresValue.Value+'%' serait correct dans SQL Server. Mais en MySQL, cela s'écrit comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT('%', ParametresValue.Value, '%')
    Au passage, en SQL normalisé ou en Oracle, ce serait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '%' || ParametresValue.Value || '%'
    Oui c'est vrai bonne remarque, j'ai pas fait attention parceque au depart la base devait etre sur sql 2005 mais pour des raison de cout on va opter pour mySQL...
    Merci.

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

Discussions similaires

  1. [MySQL] requete avec LIKE
    Par hamham dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/01/2007, 15h22
  2. Interclassement MySql et requete Like
    Par Sylvain245 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/01/2006, 14h23
  3. Requete LIKE
    Par polux23 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/06/2005, 16h25
  4. Requete like en ASP
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 20/06/2005, 14h59
  5. Réponses: 19
    Dernier message: 01/04/2004, 14h41

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