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 :

Requête un peu complexe relation n:n MySQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Requête un peu complexe relation n:n MySQL
    Bonsoir communauté,

    je développe actuellement un annuaire web en php/mysql pour des cafés et restos et j'ai une recherche à mettre en place. J'ai du mal à écrire la requête SQL qui fera le boulot. Je vous explique mon schéma de base de données

    etablissement(id,nom,coordonnes,quartier...)
    service(id,libelle)
    service_etablissement(id_etablissement,id_service)

    comme vous pouvez le constater un établissement à plusieurs services genre wifi, payement par carte bancaire, cave à vis, diffusion des matchs de foot, livraison ... donc pour sélectionner un établissement qui se trouve dans tel quartier et équipe du wifi et il diffuse les matchs de foot

    sachant que je suis sur Mysql pour le faire j'ai écrit ceci ... (peut-être que c'est une connerie )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select * 
    from etablissement e
    inner join service_etablissement se on se.id_etablissement = e.id
    inner join service s on se.id_service = s.id
    where quartier = 'Mon_quartier'
    and s.libelle = 'wifi'
    and s.libelle = 'matchs'
    ...
    N.B : on pourrait passer par les ID des services et sans faire appel à la table services ...

    je sens que c'est pas très logique mais je vois pas comment m'y prendre ... merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    tu peux utiliser ce modèle de requête provenant d'une discussion précédente.
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Je dirais que le problème vient de là:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and s.libelle = 'wifi'
    and s.libelle = 'matchs'

    wifi sera difficilement égal à matchs, sauf peut-être dans la matrice

    Je te donne une piste: tu veux les établissements qui ont ces deux services. Donc dans ta requête :
    tu renvoies les établissement et le nombre de lignes
    dont les services sont dans la liste que tu indiques (wifi,matchs)
    et dont le nombre de service correspondant est de 2

    Tatayo.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Merci :)
    en fin de compte cela a donné quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select e.name, q.name,e.budget_moyen, count(se.id_service) as nbr
    from etablissements e
    join services_etablissements se on se.id_etablissement = e.id
    join quartiers q on q.id = e.quartier_id
    where se.id_service in (13,12)
    and e.quartier_id = 7
    group by e.id
    having count(se.id_service) = (SELECT count(se2.id_service)
                      FROM services_etablissements se2
                      WHERE se2.id_service IN (13,12)
                      GROUP BY se2.id_service 
                      order by count(se2.id_service) desc
                      limit 0,1)
    order by nbr
    je vous remercie encore une fois ceci ma était très utile

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

Discussions similaires

  1. Une requête un peu complexe.
    Par kitoufloux dans le forum Langage SQL
    Réponses: 22
    Dernier message: 09/03/2011, 20h07
  2. requête un peu complexe pour moi (delete + distinct + max)
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/08/2008, 12h38
  3. Requête un peu complexe
    Par yblok dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/04/2008, 14h21
  4. Construction d'une requête un peu complexe
    Par dauphin34000 dans le forum SQL
    Réponses: 9
    Dernier message: 24/05/2007, 11h43
  5. Création d'une requête un peu complexe
    Par vpicchi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/01/2007, 21h52

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