Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème requête SQL

Sujet résolu
    25 mars 2020 à 15:59:47

    Bonjour tout le monde !

    Je suis actuellement en train de créer un projet personnel pour m'entraîner, et je rencontre actuellement un problème lors d'une requête SQL. En effet, je dois récupérer les évènements auxquels un utilisateur participe, ainsi que le nombre de participant à cet évènement. Le problème vient du fait que je n'arrive pas à récupérer le nombre de participant. Pour vous donner un exemple précis :

    event_id | user_id | nbParticipant

       1               2             1

       1               3             1

       2               3             1

    Ceci est le résultat que j'obtiens grâce à cette requête sans pour le moment préciser l'utilisateur :

    select e.id as event_id, count(u.id) as participant, u.id as user_id from events e join user_events ue ON e.id = ue.events_id join user u on ue.user_id = u.id group by e.id, u.id;

    Le problème vient du fait que je souhaite récupérer le bon nombre de participant pour l'event 1 tout en gardant les utilisateurs bien distinct de manière à pouvoir filtrer sur un utilisateur. Ce que je souhaiterai obtenir :

    event_id | user_id | nbParticipant

       1               2             2

       1               3             2

       2               3             1

    Pour ensuite pouvoir filtrer utilisateur (le 3 par exemple) et obtenir :

    event_id | user_id | nbParticipant

       1               3             2

       2               3             1

    Après plusieurs tentatives, je bloque toujours.

    Au niveau des mes tables je possède 3 tables : une table event, une table user et une table pivot user_event.

    Pourriez-vous m'aider ?

    Merci d'avance. :)

    -
    Edité par Kevin LEONARD 25 mars 2020 à 16:01:44

    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2020 à 16:13:15

      Bonjour,

      Je te conseille d'utiliser une sous-requête qui va simplement compter le nombre de participants par événement :

      SELECT event_id, COUNT(*) AS nb_users
      FROM user_event
      GROUP BY event_id

      Puis d'utiliser cette sous-requête dans ta requête principale.

      -
      Edité par Benzouye 25 mars 2020 à 17:04:52

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        25 mars 2020 à 16:35:46

        Merci pour ta réponse :)

        Je reviens vers toi car je n'ai pas trop compris comment utiliser cette sous-requête dans ma requête principale.

        Je me retrouve du coup avec 2 requêtes :

        1) select u.id as user_id from events e join user_events ue ON e.id = ue.events_id join user u on ue.user_id = u.id group by e.id, u.id HAVING u.id = 52

        2) SELECT events_id, COUNT(*) AS nb_users FROM user_events GROUP BY events_id

        Mais je ne vois pas comment les lier

        -
        Edité par Kevin LEONARD 25 mars 2020 à 16:40:45

        • Partager sur Facebook
        • Partager sur Twitter
          25 mars 2020 à 17:06:47

          SELECT
          	UE.event_id,
          	UE.user_id,
          	C.nb_users
          FROM
          	user_event UE
          		INNER JOIN (
          				-- Nombre user par event
          				SELECT event_id, COUNT(*) AS nb_users
          				FROM user_event
          				GROUP BY event_id
          			) C
          			ON UE.event_id = C.event_id
          WHERE UE.user_id = 52

          -
          Edité par Benzouye 25 mars 2020 à 17:07:13

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          Problème requête SQL

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown