Archives de la liste a​i​d​e​@p​a​h​e​k​o​.c​l​o​u​d​

Aide SQL

PC Chevaux

14/01/2023 14:48:40

Bonjour,

Je cherche à connaitre la liste des membres qui sont inscrits à 2 activités
nommées "Activité1" et "Activité2"
Quelqu'un peut-il m'aider coté SQL car ce n'est vraiment pas mon fort.

Merci
Pascal

Aide SQL

Eric Buissonnet

14/01/2023 15:10:53

Pascal, une base qui recherche les membres actuellement inscrits à une 
activité et un tarif donné. Adapter s.id =1 (le numéro de l'activité) et 
su.id_fee = 1 (le numéro de tarif) et doubler la condition pour couvrir 
la deuxième activité.

Le test sur la date c'est pour ne sortir que les inscriptions à 
l'activité qui sont dans la plage temporelle de l'activité (cas d'un 
date à date) et ne pas sortir quelqu'un qui y aurait été inscrit dans un 
précédente édition.

Eric

SELECT
   membres.nom,
   membres.email,
   membres.id AS _user_id,
   s.label AS 'Activité',
   f.label AS 'Tarif',
   su.paid AS 'Payé',
   su.date AS 'Date'
FROM membres
   INNER JOIN services_users su ON su.id_user = membres.id
   INNER JOIN services s ON s.id = su.id_service
   INNER JOIN services_fees f ON f.id = su.id_fee
WHERE s.id = 1 AND su.id_fee = 1 AND su.date >= s.start_date
ORDER BY membres.nom ASC LIMIT 1000
;

Le 14/01/2023 à 14:47, PC Chevaux a écrit :
> Bonjour,
>
> Je cherche à connaitre la liste des membres qui sont inscrits à 2 
> activités nommées "Activité1" et "Activité2"
> Quelqu'un peut-il m'aider coté SQL car ce n'est vraiment pas mon
fort.
>
> Merci
> Pascal

Aide SQL

PC Chevaux

14/01/2023 16:54:57

Bonjour t merci pour ton aide.

En fait je cherche beaucoup plus simple.
Je n'ai pas besoin de vérifier ni les dates ni les tarifs.
Je cherche les personnes inscrites à la fois à "Adhesions 2022" ET
"Adhesions 2023"
Comme je ne connais pas le s.id de mes activités, j'ai filtré sur le
s.label.
A quel endroit faut-il doubler la condition de la 2ème activité.

J'ai écrit quelque chose qui ressemble à ça (Avec 1 seule activité) :

SELECT
  membres.nom,
  membres.email,
  membres.id AS _user_id,
  s.label AS 'Adhesions 2023'
FROM membres
  INNER JOIN services_users su ON su.id_user = membres.id
  INNER JOIN services s ON s.id = su.id_service
WHERE s.label = "Adhesions 2023"
ORDER BY membres.nom ASC LIMIT 1000
;

Mais en faisant ça je me retrouve avec la liste de tous mes adhérents avec
toutes leurs inscriptions.

Merci de ton aide
Pascal

Le sam. 14 janv. 2023 à 15:34, Eric Buissonnet <e.buissonnet@free.fr> a
écrit :

> Pascal, une base qui recherche les membres actuellement inscrits à une
> activité et un tarif donné. Adapter s.id =1 (le numéro de l'activité)
et
> su.id_fee = 1 (le numéro de tarif) et doubler la condition pour couvrir la
> deuxième activité.
>
> Le test sur la date c'est pour ne sortir que les inscriptions à
l'activité
> qui sont dans la plage temporelle de l'activité (cas d'un date à date)
et
> ne pas sortir quelqu'un qui y aurait été inscrit dans un précédente
édition.
>
> Eric
>
> SELECT
>   membres.nom,
>   membres.email,
>   membres.id AS _user_id,
>   s.label AS 'Activité',
>   f.label AS 'Tarif',
>   su.paid AS 'Payé',
>   su.date AS 'Date'
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id
>   INNER JOIN services s ON s.id = su.id_service
>   INNER JOIN services_fees f ON f.id = su.id_fee
> WHERE s.id = 1 AND su.id_fee = 1 AND su.date >= s.start_date
> ORDER BY membres.nom ASC LIMIT 1000
> ;
>
> Le 14/01/2023 à 14:47, PC Chevaux a écrit :
>
> Bonjour,
>
> Je cherche à connaitre la liste des membres qui sont inscrits à 2
> activités nommées "Activité1" et "Activité2"
> Quelqu'un peut-il m'aider coté SQL car ce n'est vraiment pas mon
fort.
>
> Merci
> Pascal
>
>

Aide SQL

PC Chevaux

14/01/2023 17:24:38

J'ai un peu modifié et je m'approche du résultat.

SELECT
  membres.nom,
  membres.email,
  membres.id AS _user_id,
  s.label AS 'Activité'
FROM membres
  INNER JOIN services_users su ON su.id_user = membres.id
  INNER JOIN services s ON s.id = su.id_service
WHERE s.label = "Adhesions 2023" OR s.label = "RAPPELS"
ORDER BY membres.nom ASC LIMIT 1000
;

J'obtiens la liste des personnes inscrites à l'une ou à l'autre activité
ou
aux 2.
Je souhaiterais ne conserver que les personnes inscrites aux 2 et n'avoir
pour chacune de ces personnes qu'une seule ligne (quelque soit l'activité)

Pascal

Le sam. 14 janv. 2023 à 16:53, PC Chevaux <pascatche@gmail.com> a écrit :

> Bonjour t merci pour ton aide.
>
> En fait je cherche beaucoup plus simple.
> Je n'ai pas besoin de vérifier ni les dates ni les tarifs.
> Je cherche les personnes inscrites à la fois à "Adhesions 2022" ET
> "Adhesions 2023"
> Comme je ne connais pas le s.id de mes activités, j'ai filtré sur le
> s.label.
> A quel endroit faut-il doubler la condition de la 2ème activité.
>
> J'ai écrit quelque chose qui ressemble à ça (Avec 1 seule activité) :
>
> SELECT
>   membres.nom,
>   membres.email,
>   membres.id AS _user_id,
>   s.label AS 'Adhesions 2023'
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id
>   INNER JOIN services s ON s.id = su.id_service
> WHERE s.label = "Adhesions 2023"
> ORDER BY membres.nom ASC LIMIT 1000
> ;
>
> Mais en faisant ça je me retrouve avec la liste de tous mes adhérents avec
> toutes leurs inscriptions.
>
> Merci de ton aide
> Pascal
>
> Le sam. 14 janv. 2023 à 15:34, Eric Buissonnet <e.buissonnet@free.fr> a
> écrit :
>
>> Pascal, une base qui recherche les membres actuellement inscrits à une
>> activité et un tarif donné. Adapter s.id =1 (le numéro de l'activité)
et
>> su.id_fee = 1 (le numéro de tarif) et doubler la condition pour couvrir
la
>> deuxième activité.
>>
>> Le test sur la date c'est pour ne sortir que les inscriptions à
>> l'activité qui sont dans la plage temporelle de l'activité (cas
d'un date à
>> date) et ne pas sortir quelqu'un qui y aurait été inscrit dans un
>> précédente édition.
>>
>> Eric
>>
>> SELECT
>>   membres.nom,
>>   membres.email,
>>   membres.id AS _user_id,
>>   s.label AS 'Activité',
>>   f.label AS 'Tarif',
>>   su.paid AS 'Payé',
>>   su.date AS 'Date'
>> FROM membres
>>   INNER JOIN services_users su ON su.id_user = membres.id
>>   INNER JOIN services s ON s.id = su.id_service
>>   INNER JOIN services_fees f ON f.id = su.id_fee
>> WHERE s.id = 1 AND su.id_fee = 1 AND su.date >= s.start_date
>> ORDER BY membres.nom ASC LIMIT 1000
>> ;
>>
>> Le 14/01/2023 à 14:47, PC Chevaux a écrit :
>>
>> Bonjour,
>>
>> Je cherche à connaitre la liste des membres qui sont inscrits à 2
>> activités nommées "Activité1" et "Activité2"
>> Quelqu'un peut-il m'aider coté SQL car ce n'est vraiment pas
mon fort.
>>
>> Merci
>> Pascal
>>
>>

Aide SQL

Eric Buissonnet

14/01/2023 18:21:02

Ceci me semble répondre au besoin :

SELECT
   membres.nom,
   membres.email,
   membres.id AS _user_id
FROM membres
   INNER JOIN services_users su ON su.id_user = membres.id
   INNER JOIN services s ON s.id = su.id_service
WHERE s.label = "Adhesions 2023" AND membres.id in (

     SELECT   membres.id
     FROM membres
       INNER JOIN services_users su ON su.id_user = membres.id
       INNER JOIN services s ON s.id = su.id_service
     WHERE s.label = "RAPPELS"
  )
  GROUP BY membres.id ORDER BY membres.nom LIMIT 1000
;


Et pour répondre à une de tes questions, si tu cliques sur le bouton 
"Voir le schéma SQL complet", alors tu peux explorer les tables et leurs 
valeurs cliquant sur les liens genre "services_users"

Et au fait, merci : je n'avais pas remarqué le champ "label", plus sympa 
que de manipuler us s.id = 1

Eric

Le 14/01/2023 à 17:23, PC Chevaux a écrit :
> J'ai un peu modifié et je m'approche du résultat.
>
> SELECT
>   membres.nom,
>   membres.email,
> membres.id <http://membres.id> AS _user_id,
>   s.label AS 'Activité'
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id 
> <http://membres.id>
>   INNER JOIN services s ON s.id <http://s.id> = su.id_service
> WHERE s.label = "Adhesions 2023" OR s.label = "RAPPELS"
> ORDER BY membres.nom ASC LIMIT 1000
> ;
>
> J'obtiens la liste des personnes inscrites à l'une ou à l'autre

> activité ou aux 2.
> Je souhaiterais ne conserver que les personnes inscrites aux 2 et 
> n'avoir pour chacune de ces personnes qu'une seule ligne (quelque soit

> l'activité)
>
> Pascal
>
> Le sam. 14 janv. 2023 à 16:53, PC Chevaux <pascatche@gmail.com> a
écrit :
>
>     Bonjour t merci pour ton aide.
>
>     En fait je cherche beaucoup plus simple.
>     Je n'ai pas besoin de vérifier ni les dates ni les tarifs.
>     Je cherche les personnes inscrites à la fois à "Adhesions 2022"
ET
>     "Adhesions 2023"
>     Comme je ne connais pas le s.id <http://s.id> de mes activités,
>     j'ai filtré sur le s.label.
>     A quel endroit faut-il doubler la condition de la 2ème activité.
>
>     J'ai écrit quelque chose qui ressemble à ça (Avec 1 seule activité)
:
>
>     SELECT
>       membres.nom,
>       membres.email,
>     membres.id <http://membres.id> AS _user_id,
>       s.label AS 'Adhesions 2023'
>     FROM membres
>       INNER JOIN services_users su ON su.id_user = membres.id
>     <http://membres.id>
>       INNER JOIN services s ON s.id <http://s.id> = su.id_service
>     WHERE s.label = "Adhesions 2023"
>     ORDER BY membres.nom ASC LIMIT 1000
>     ;
>
>     Mais en faisant ça je me retrouve avec la liste de tous mes
>     adhérents avec toutes leurs inscriptions.
>
>     Merci de ton aide
>     Pascal
>
>     Le sam. 14 janv. 2023 à 15:34, Eric Buissonnet
>     <e.buissonnet@free.fr> a écrit :
>
>         Pascal, une base qui recherche les membres actuellement
>         inscrits à une activité et un tarif donné. Adapter s.id
>         <http://s.id> =1 (le numéro de l'activité) et su.id_fee =
1
>         (le numéro de tarif) et doubler la condition pour couvrir la
>         deuxième activité.
>
>         Le test sur la date c'est pour ne sortir que les inscriptions
>         à l'activité qui sont dans la plage temporelle de
l'activité
>         (cas d'un date à date) et ne pas sortir quelqu'un qui y
aurait
>         été inscrit dans un précédente édition.
>
>         Eric
>
>         SELECT
>            membres.nom,
>            membres.email,
>            membres.id  <http://membres.id>  AS _user_id,
>            s.label AS 'Activité',
>            f.label AS 'Tarif',
>            su.paid AS 'Payé',
>            su.date AS 'Date'
>         FROM membres
>            INNER JOIN services_users su ON su.id_user =membres.id 
<http://membres.id>
>            INNER JOIN services s ONs.id  <http://s.id>  = su.id_service
>            INNER JOIN services_fees f ONf.id  <http://f.id>  =
su.id_fee
>         WHEREs.id  <http://s.id>  = 1 AND su.id_fee = 1 AND su.date >=
s.start_date
>         ORDER BY membres.nom ASC LIMIT 1000
>         ;
>
>         Le 14/01/2023 à 14:47, PC Chevaux a écrit :
>>         Bonjour,
>>
>>         Je cherche à connaitre la liste des membres qui sont inscrits
>>         à 2 activités nommées "Activité1" et
"Activité2"
>>         Quelqu'un peut-il m'aider coté SQL car ce n'est
vraiment pas
>>         mon fort.
>>
>>         Merci
>>         Pascal
>

Aide SQL

Eric Buissonnet

14/01/2023 20:05:29

Ou celle-ci, plus facile à comprendre et à lier à la demande initiale :

SELECT
   membres.nom,
   membres.email,
   membres.id AS _user_id
FROM membres
   INNER JOIN services_users su ON su.id_user = membres.id
   INNER JOIN services s ON s.id = su.id_service
WHERE s.label = "Adhesions 2023"

INTERSECT

SELECT
   membres.nom,
   membres.email,
   membres.id AS _user_id
FROM membres
   INNER JOIN services_users su ON su.id_user = membres.id
   INNER JOIN services s ON s.id = su.id_service
WHERE s.label = "RAPPELS"

ORDER BY membres.nom ASC
LIMIT 1000
;

Eric

Le 14/01/2023 à 17:23, PC Chevaux a écrit :
> J'ai un peu modifié et je m'approche du résultat.
>
> SELECT
>   membres.nom,
>   membres.email,
> membres.id <http://membres.id> AS _user_id,
>   s.label AS 'Activité'
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id 
> <http://membres.id>
>   INNER JOIN services s ON s.id <http://s.id> = su.id_service
> WHERE s.label = "Adhesions 2023" OR s.label = "RAPPELS"
> ORDER BY membres.nom ASC LIMIT 1000
> ;
>
> J'obtiens la liste des personnes inscrites à l'une ou à l'autre

> activité ou aux 2.
> Je souhaiterais ne conserver que les personnes inscrites aux 2 et 
> n'avoir pour chacune de ces personnes qu'une seule ligne (quelque soit

> l'activité)
>
> Pascal
>
> Le sam. 14 janv. 2023 à 16:53, PC Chevaux <pascatche@gmail.com> a
écrit :
>
>     Bonjour t merci pour ton aide.
>
>     En fait je cherche beaucoup plus simple.
>     Je n'ai pas besoin de vérifier ni les dates ni les tarifs.
>     Je cherche les personnes inscrites à la fois à "Adhesions 2022"
ET
>     "Adhesions 2023"
>     Comme je ne connais pas le s.id <http://s.id> de mes activités,
>     j'ai filtré sur le s.label.
>     A quel endroit faut-il doubler la condition de la 2ème activité.
>
>     J'ai écrit quelque chose qui ressemble à ça (Avec 1 seule activité)
:
>
>     SELECT
>       membres.nom,
>       membres.email,
>     membres.id <http://membres.id> AS _user_id,
>       s.label AS 'Adhesions 2023'
>     FROM membres
>       INNER JOIN services_users su ON su.id_user = membres.id
>     <http://membres.id>
>       INNER JOIN services s ON s.id <http://s.id> = su.id_service
>     WHERE s.label = "Adhesions 2023"
>     ORDER BY membres.nom ASC LIMIT 1000
>     ;
>
>     Mais en faisant ça je me retrouve avec la liste de tous mes
>     adhérents avec toutes leurs inscriptions.
>
>     Merci de ton aide
>     Pascal
>
>     Le sam. 14 janv. 2023 à 15:34, Eric Buissonnet
>     <e.buissonnet@free.fr> a écrit :
>
>         Pascal, une base qui recherche les membres actuellement
>         inscrits à une activité et un tarif donné. Adapter s.id
>         <http://s.id> =1 (le numéro de l'activité) et su.id_fee =
1
>         (le numéro de tarif) et doubler la condition pour couvrir la
>         deuxième activité.
>
>         Le test sur la date c'est pour ne sortir que les inscriptions
>         à l'activité qui sont dans la plage temporelle de
l'activité
>         (cas d'un date à date) et ne pas sortir quelqu'un qui y
aurait
>         été inscrit dans un précédente édition.
>
>         Eric
>
>         SELECT
>            membres.nom,
>            membres.email,
>            membres.id  <http://membres.id>  AS _user_id,
>            s.label AS 'Activité',
>            f.label AS 'Tarif',
>            su.paid AS 'Payé',
>            su.date AS 'Date'
>         FROM membres
>            INNER JOIN services_users su ON su.id_user =membres.id 
<http://membres.id>
>            INNER JOIN services s ONs.id  <http://s.id>  = su.id_service
>            INNER JOIN services_fees f ONf.id  <http://f.id>  =
su.id_fee
>         WHEREs.id  <http://s.id>  = 1 AND su.id_fee = 1 AND su.date >=
s.start_date
>         ORDER BY membres.nom ASC LIMIT 1000
>         ;
>
>         Le 14/01/2023 à 14:47, PC Chevaux a écrit :
>>         Bonjour,
>>
>>         Je cherche à connaitre la liste des membres qui sont inscrits
>>         à 2 activités nommées "Activité1" et
"Activité2"
>>         Quelqu'un peut-il m'aider coté SQL car ce n'est
vraiment pas
>>         mon fort.
>>
>>         Merci
>>         Pascal
>

Aide SQL

PC Chevaux

15/01/2023 10:01:35

Bonjour,

Merci beaucoup. Les 2 fonctionnent très bien.
Il va falloir que je m'y mette sérieusement.

Encore merci
Pascal

Le sam. 14 janv. 2023 à 20:07, Eric Buissonnet <e.buissonnet@free.fr> a
écrit :

> Ou celle-ci, plus facile à comprendre et à lier à la demande initiale :
>
> SELECT
>   membres.nom,
>   membres.email,
>   membres.id AS _user_id
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id
>   INNER JOIN services s ON s.id = su.id_service
> WHERE s.label = "Adhesions 2023"
>
> INTERSECT
>
> SELECT
>   membres.nom,
>   membres.email,
>   membres.id AS _user_id
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id
>   INNER JOIN services s ON s.id = su.id_service
> WHERE s.label = "RAPPELS"
>
> ORDER BY membres.nom ASC
> LIMIT 1000
> ;
>
> Eric
>
> Le 14/01/2023 à 17:23, PC Chevaux a écrit :
>
> J'ai un peu modifié et je m'approche du résultat.
>
> SELECT
>   membres.nom,
>   membres.email,
>   membres.id AS _user_id,
>   s.label AS 'Activité'
> FROM membres
>   INNER JOIN services_users su ON su.id_user = membres.id
>   INNER JOIN services s ON s.id = su.id_service
> WHERE s.label = "Adhesions 2023" OR s.label = "RAPPELS"
> ORDER BY membres.nom ASC LIMIT 1000
> ;
>
> J'obtiens la liste des personnes inscrites à l'une ou à l'autre
activité
> ou aux 2.
> Je souhaiterais ne conserver que les personnes inscrites aux 2 et n'avoir
> pour chacune de ces personnes qu'une seule ligne (quelque soit
l'activité)
>
> Pascal
>
> Le sam. 14 janv. 2023 à 16:53, PC Chevaux <pascatche@gmail.com> a écrit
:
>
>> Bonjour t merci pour ton aide.
>>
>> En fait je cherche beaucoup plus simple.
>> Je n'ai pas besoin de vérifier ni les dates ni les tarifs.
>> Je cherche les personnes inscrites à la fois à "Adhesions 2022"
ET
>> "Adhesions 2023"
>> Comme je ne connais pas le s.id de mes activités, j'ai filtré sur
le
>> s.label.
>> A quel endroit faut-il doubler la condition de la 2ème activité.
>>
>> J'ai écrit quelque chose qui ressemble à ça (Avec 1 seule activité)
:
>>
>> SELECT
>>   membres.nom,
>>   membres.email,
>>   membres.id AS _user_id,
>>   s.label AS 'Adhesions 2023'
>> FROM membres
>>   INNER JOIN services_users su ON su.id_user = membres.id
>>   INNER JOIN services s ON s.id = su.id_service
>> WHERE s.label = "Adhesions 2023"
>> ORDER BY membres.nom ASC LIMIT 1000
>> ;
>>
>> Mais en faisant ça je me retrouve avec la liste de tous mes adhérents
>> avec toutes leurs inscriptions.
>>
>> Merci de ton aide
>> Pascal
>>
>> Le sam. 14 janv. 2023 à 15:34, Eric Buissonnet <e.buissonnet@free.fr>
a
>> écrit :
>>
>>> Pascal, une base qui recherche les membres actuellement inscrits à
une
>>> activité et un tarif donné. Adapter s.id =1 (le numéro de
l'activité)
>>> et su.id_fee = 1 (le numéro de tarif) et doubler la condition pour
couvrir
>>> la deuxième activité.
>>>
>>> Le test sur la date c'est pour ne sortir que les inscriptions à
>>> l'activité qui sont dans la plage temporelle de l'activité
(cas d'un date à
>>> date) et ne pas sortir quelqu'un qui y aurait été inscrit dans
un
>>> précédente édition.
>>>
>>> Eric
>>>
>>> SELECT
>>>   membres.nom,
>>>   membres.email,
>>>   membres.id AS _user_id,
>>>   s.label AS 'Activité',
>>>   f.label AS 'Tarif',
>>>   su.paid AS 'Payé',
>>>   su.date AS 'Date'
>>> FROM membres
>>>   INNER JOIN services_users su ON su.id_user = membres.id
>>>   INNER JOIN services s ON s.id = su.id_service
>>>   INNER JOIN services_fees f ON f.id = su.id_fee
>>> WHERE s.id = 1 AND su.id_fee = 1 AND su.date >= s.start_date
>>> ORDER BY membres.nom ASC LIMIT 1000
>>> ;
>>>
>>> Le 14/01/2023 à 14:47, PC Chevaux a écrit :
>>>
>>> Bonjour,
>>>
>>> Je cherche à connaitre la liste des membres qui sont inscrits à 2
>>> activités nommées "Activité1" et "Activité2"
>>> Quelqu'un peut-il m'aider coté SQL car ce n'est vraiment
pas mon fort.
>>>
>>> Merci
>>> Pascal
>>>
>>>