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 :

Remplacer une query imbriqué sous mySQL 4.01


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut Remplacer une query imbriqué sous mySQL 4.01
    Bonjour,

    j'aimerai de l'aide pour faire un requete qui me semble assez complexe. J'utilise MySQL 4.01 (ce qui insinu pas de requete imbriqué ).

    Voila j'ai 4 tables : USER,PARAMETER,VALUE_PARAMETER, USER_PARAMETER qui se présente de la sorte :

    USER( userid, name )

    ----------------
    u1, dupont
    u2, lacroix
    ----------------


    PARAMETER (prmid,name)
    ----------------
    p1,yeux
    p2,cheveux
    ----------------

    VALUE_PARAMETER ( vprmid,prmdid,value)
    ----------------
    vp1, p1, bleu
    vp2, p1, marron
    vp3, p2, chatain
    vp4, p2, blond
    ----------------


    USER_PARAMETER ( userid,prmid,vprmid)

    ----------------
    u1,p1,vp2
    u1,p2,vp3
    u2,p1,vp2
    u2,p2,vp4
    ----------------


    ---> DUPONT A LES YEUX MARRON ET LES CHEVEUX CHATAIN
    ---> LACROIX A LES YEUX MARRON ET LES CHEVEUX BLOND

    Et donc voila j'ai besoin d'implementer un moteur de recherche de user en fonction des parametres de leur profil !!!! Par exemple tt les user qui on les yeux marrons ou encore tous les users qui ont les yeux marron et les cheveux blonds !!!

    Je pensais faire plein de requete imbriqué mais je pense que ca sera tres couteux en tps si j'ai bcp de user et de parametre mais de toutes facons mySQL 4.01 ne le permet pas !!!

    Ainsi je m'en remets aux experts pour essayer de monter ma requete !! Car la j'avoue que je seche un peu.

    Merci par avance de votre aide.

    B.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: [REQUETE] Remplacer une query imbriqué sous mySQL 4.01
    Pour l'affichage des caractéristiques, je te propose ceci, avec des jointures :

    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
    SELECT
      USER.name AS "nom",
      VP1.value AS "yeux",
      VP2.value AS "cheveux"
     
    FROM USER
     
    # Paramètre 'yeux'
    LEFT OUTER JOIN `USER_PARAMETER` UP1
    ON (USER.userid=UP1.userid 
    AND UP1.prmid='p1')
     
    LEFT OUTER JOIN `VALUE_PARAMETER` VP1
    ON (VP1.prmid=UP1.prmdid AND VP1.vprmid=UP1.vprmid)
     
     
     
    # Paramètre 'cheveux'
    LEFT OUTER JOIN `USER_PARAMETER`  UP2
    ON (USER.userid=USER_PARAMETER.userid 
    AND USER_PARAMETER.prmid='p2')
     
    LEFT OUTER `VALUE_PARAMETER` VP2
    ON (VP2.prmid=UP2.prmdid AND VP2.vprmid=UP2.vprmid)
     
    ...

    Ca devrait te sortir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nom  |  yeux  |  cheveux
    ------------------------------
    dupont | Marron | Chatain
    lacroix | Marron | Blond
    Si l'une des caractéristiques n'est pas renseignée, cela te retournera NULL pour cette caractéristique (de par la condition de jointure, qui fait que le LEFT JOIN fait également office de produit cartésien...)

    Après, tu peux ajouter une clause WHERE dans laquelle tu spécifies des restrictions sur les critères de recherche. Tu peux aussi ajouter une clause ORDER BY avec une formule mathématique qui te classeras tes résultats par pertinence.

    Tu auras remarqué que pour générer cette requête SQL, il te faudra utiliser une autre requête SQL qui parcourera les différents PARAMETER possibles (yeux, cheveux...).

    ***

    Sinon, est-ce, comme tu as une table "USER_PARAMETER" pour enregistrer le fait que "Dupond a les yeux marrons", tu as une relation "USER_RESEARCH_PARAMETER" pour dire "Dupond recherche quelqu'un aux cheveux blonds"? Dans ce cas, tu peux faire un autre type de requête avec une jointure et un GROUP BY.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    La solution la plus peformante (en termes de temps et de place), ça reste quand même de faire une table "user" avec comme champs: id, nom, yeux, cheveux... et de faire des tables "couleur_yeux", "couleur_cheveux". (quitte à faire un "ALTER TABLE" par la suite pour rajouter une colonne).

    Pourquoi avez-vous choisi cette représentation des données?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Tout d'abord merci pour votre aide j'aurai effectivement pas su la faire tout seul cette requete !!!

    J'ai choisis ce model car je veux etre libre de pouvoir rajouter un parametre sans justement avoir a rajouter un champ dans la table. Je suis consciens que ca peux effectivement etre tres couteux en terme de performance........ j'avoue que j'avais penser à la derniere solution proposée. En theorie c'est certainement plus propre de faire comme la premiere mais dans la pratique c'est certainement plus lourd.

    J'avoue que je pense de plus en plus vers la solution 2 !!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Tu penses vraiment que les tps de réponses sur ces requetes peuvent tres longue ?
    Finallement j'ai mySQL 4.1 donc je peux faire des requetes imbriqués mais je sais pas si ca change grand chose

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Dans un autre sujet, on est passé de 1.5s à 0.050s en suprimant des requêtes imbriquées...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Effectivement c'est sans appel !!! Merci beaucoup de ton aide

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

Discussions similaires

  1. Comment créer une requête imbriquée sous BO ?
    Par le_om dans le forum Débuter
    Réponses: 8
    Dernier message: 16/03/2012, 13h03
  2. Créer une procédure stockée sous MySQL avec phpmyadmin
    Par Jordan59 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 17/08/2011, 14h08
  3. Requête imbriquée sous MySQL
    Par hakim_vb dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/07/2010, 17h12
  4. création d'une clé étrangère sous mysql
    Par franfr57 dans le forum Outils
    Réponses: 2
    Dernier message: 23/03/2006, 09h24
  5. Comment faire une analyse croisée sous MySQL ?
    Par jcachico dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/12/2005, 18h32

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