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

Requêtes MySQL Discussion :

Faire une recherche de chaîne dans un champ de type "text"


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Faire une recherche de chaîne dans un champ de type "text"
    Bonjour à tous,

    J'ai une table contenant un nom d'article, et un champ text contenant tous les noms des demandeurs de ces articles (séparés par des "\n") et je dois faire une petite appli web, permettant:

    1) De donner une liste des demandeurs en fonction d'un article sélectionné.
    2) De donner la liste des articles demandés par un demandeur sélectionné.

    Il me faudrait donc une méthode pour chercher dans un champ de type -text- une chaine contenant le nom du demandeur voulu.

    Quelque chose du style Pour la fonction 2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id FROM article WHERE "Monsieur Machin" EST DANS demandeurs
    La fonction 1) ne posant aucun problème, il me suffit d'echo le champ "demandeurs" de la table "articles" en fonction de l'id choisit..

    Voilà, j'espère avoir été clair, et surtout j'espère que c'est faisable.

    Merci à tous pour vos éventuelles réponses.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ykseb Voir le message
    J'ai une table contenant un nom d'article, et un champ text contenant tous les noms des demandeurs de ces articles (séparés par des "\n")
    Ca déjà, ça signifie que le modèle de données est mauvais !
    Il devrait y avoir une table associative entre les demandeurs et les articles, à partir du MCD suivant :
    Demandeur -0,n----Demander----0,n- Article
    La table associative issue de l'association Demander peut donc ne contenir que les identifiants des demandeurs et des articles, ce couple constituant aussi la clé primaire de la table.
    Ce qui donnerait les tables :
    Demandeur (D_Id, D_Nom, D_Prenom...)
    Article (A_Id, A_Titre...)
    DemandeArticle (DA_IdDemandeur, DA_IdArticle...)

    1) De donner une liste des demandeurs en fonction d'un article sélectionné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT d.D_Nom, d.D_Prenom
    FROM Demandeur AS d
    INNER JOIN DemandeArticle AS da ON d.D_Id = da.DA_IdDemandeur
      INNER JOIN Article AS a ON da.DA_IdArticle = a.A_Id
    WHERE a.A_Titre = 'La conception des bases de données relationnelles'
    ORDER BY d.D_Nom, d.D_Prenom
    2) De donner la liste des articles demandés par un demandeur sélectionné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT a.A_Titre
    FROM Demandeur AS d
    INNER JOIN DemandeArticle AS da ON d.D_Id = da.DA_IdDemandeur
      INNER JOIN Article AS a ON da.DA_IdArticle = a.A_Id
    WHERE d.D_Nom = 'Leménager'
      AND d.D_Prenom = 'Philippe'
    ORDER BY a.A_Titre
    Ce sera beaucoup plus rapide, avec des tables correctement indexées bien sûr, que de faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A_Titre
    FROM Articles
    WHERE A_demandeurs LIKE '%Philippe Leménager%'
    Car une recherche avec LIKE n'est pas optimale.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Ah top, j'avoue que je n'avais jamais pensé à faire une base de données relationelle, et effectivement c'est beaucoup plus simple, et optimisé.
    J'ai pas encore les bons reflexes étant novice en gestion de bases de données, et surtout apprenant par moi même.

    Merci pour ta réponse très complète, je vais donc revoir mes tables.

    Un grand merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/03/2008, 15h15
  2. [SQL] Faire une recherche plus modification dans base sql
    Par ju3979 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 09/08/2007, 17h26
  3. [VB.NET] Faire une recherche dans une treeview
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/11/2005, 19h10
  4. Réponses: 9
    Dernier message: 07/11/2005, 19h57

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