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
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
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
>
>
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
>>
>>
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
>
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
>
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
>>>
>>>