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 :

Table de liens


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Table de liens
    Merci de votre aide, je vous retrace exactement ce que j'ai fais:
    j'ai comme table:
    1 clients Champs => ID, Nom, Prenom, Email etc.
    2 rubriquesChamps => ID, TYPE de rubrique, valeur
    3 une table de lien rubrique_clientChamps => IdClients, IdRubriques

    rubrique
    ID | Type | valeur
    1 | Voiture | Renault
    2 | Habitation | maison
    3 | Animaux | chat
    4 | Animaux | chien
    etc...

    en liant les tables,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT clients.Nom FROM clients
    INNER JOIN rubrique_client ON clients.ID = rubrique_client.IdClient
    INNER JOIN rubrique ON rubrique.ID = client_rubrique.IdRubrique
    WHERE (rubrique.ID IN (3,4))
    PAr exemple, j'obtiens le nom des clients ayant OU un chat OU un chient.
    Or comment obtenir un chat ET un chien?
    Déjà cela, après je voudrais compliquer encore... mais on verra ensuite

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    avec ta requête, tu as l'un ou l'autre.

    Pour te donner une piste : l'idée est de grouper sur le nom des client (à l'aide d'une clause group by) et de garder ceux qui ont les 2 (clause having à utiliser avec count )

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui, j'ai pu voir grâce à des aides d'un autre forum cette méthode cela fonctionne plutôt bien.

    Mais j'ai compliqué la chose:

    en suivant toujours la même structure

    ID | Type | valeur
    1 | Voiture | Renault
    2 | Habitation | villa
    3 | Animaux | chat
    4 | Animaux | chien
    5 | Habitation | appartement
    6 | Voiture | Seat

    Si je veux que voiture soit (Seat OU renault) ET Habitation (villa OU pavillon) etc... ;o)
    Pff je me demande si je ne devrais pas réaménager ma db ?

    Citation Envoyé par Cybher Voir le message
    salut,

    avec ta requête, tu as l'un ou l'autre.

    Pour te donner une piste : l'idée est de grouper sur le nom des client (à l'aide d'une clause group by) et de garder ceux qui ont les 2 (clause having à utiliser avec count )

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    en rajoutant à ta clause having quelque chose dans ce style peut être ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and count(distinct type) = 2
    sinon tu as beaucoup de type différents dans cette table?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Dans ce cas là uniquement 3, mais si une solution couvre plusieurs cas potentiel, elle aura ma préférence.


    Citation Envoyé par Cybher Voir le message
    salut,

    en rajoutant à ta clause having quelque chose dans ce style peut être ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and count(distinct type) = 2
    sinon tu as beaucoup de type différents dans cette table?

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    pour le cas que tu nous a présenté, tu as essayé de compléter la requête avec ce que j'ai proposé pour voir si cela fonctionne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT clients.Nom FROM clients
    INNER JOIN rubrique_client ON clients.ID = rubrique_client.IdClient
    INNER JOIN rubrique ON rubrique.ID = client_rubrique.IdRubrique
    WHERE rubrique.ID IN (.....)
    group by clients.Nom
    having count(distinct type)=2
    tu sélectionnes toutes les lignes correspondantes aux différents ID que tu cherches, tu groupes et tu récupéres seulement ceux où il y 2 types distincts (voiture et habitation)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui pardon excuses-moi de n'avoir pas confirmé. C'est bien vu.

    J'aime bien cette idée. Merci.

    Cela me sort de la panade. Mais je continue à chercher quelque chose qui couvre plus de cas de figure.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci de l'aide
    Je crois que cela devrait me convenir:
    J'ai repris ma requête à 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM client_rubrique
    LEFT JOIN rubrique ON client_rubrique.IdRubrique = rubrique.ID
    LEFT JOIN client ON client_rubrique.IdClient = client.ID'
    WHERE rubrique.ID
    les clients avec des (seat ou des renault) et vivant (dans une villa ou en appart)

    IN ( 1, 2, 5, 6)
    AND rubrique.IdTRubrique
    IN ( 1, 2 ) (j'ai mis des numéros a mes types relier a une table type)
    GROUP BY client_rubrique.IdClient
    HAVING count( DISTINCT rubrique.IdTRubrique ) = 2
    et si le veux les clients avec ou villa, ou appart, ou seat ou renault

    IN ( 1, 2, 5, 6)
    GROUP BY client_rubrique.IdClient

    et si le veux les clients avec une villa, et en appart, et en seat et en renault

    HAVING count( DISTINCT rubrique.IdTRubrique ) = 4

    En gros, comme cela, devrait s'adapter rapidement. Faut que je teste un peu plus loin.

    Merci à encore

Discussions similaires

  1. [Doctrine] Table de lien
    Par anaon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/04/2010, 09h20
  2. [Tableaux] les données de la table en lien
    Par afrodje dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2007, 15h13
  3. [MySQL] Question simple: afficher tous les entrées d'une table en liens
    Par anarchoi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/04/2007, 12h04
  4. Réponses: 1
    Dernier message: 29/04/2007, 19h53
  5. table de lien (conception cube)
    Par marie253 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/03/2007, 09h48

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