Bonjour,
La base de données utilisée est MySql.
J'ai notamment une table `OCCUPANT`, liée à une table `OCCUPATION`.
Ma demande concerne l'ordre de tri des "occupants".
Dans une "occupation", il peut y avoir un ou plusieurs "occupants", rattachés à un ou plusieurs "groupes".
Le premier "groupe" est toujours celui du "preneur de bail", auquel peuvent être rattachés un ou plusieurs autres "occupants", qui sont "à charge" ou non.
Peuvent suivre un ou plusieurs "groupes" auquel sont rattachés un ou plusieurs "occupants", qui sont également "à charge" ou non.
Dans un groupe, il peut y avoir plusieurs "occupant à charge", mais un seul "occupant non à charge".
Pour les identifier, il y a trois colonnes dans la table `OCCUPANT` :
- `PRENEUR_BAIL` (type BIT) ;
- `CHEF_GROUPE` (type BIT), le "preneur de bail" étant également "chef de groupe".
- `PERSONNE_A_CHARGE` (type BIT).
Les "occupants" qui ne sont pas "chef de groupe", soit ceux qui sont "à charge" ou non sont rattachés à leur "chef de groupe" par l'information `RATTACHE_A` qui contient l'ID du "chef de groupe".
L'ordre de tri que je désire est (par exemple) le suivant :
- preneur de bail (chef du premier groupe) ;
- occupant non à charge ;
- occupant à charge (tri croissant sur la date de naissance) ;
- occupant à charge (tri croissant sur la date de naissance) ;
- occupant à charge (tri croissant sur la date de naissance) ;
- chef de groupe ;
- occupant à charge (tri croissant sur la date de naissance) ;
- occupant à charge (tri croissant sur la date de naissance) ;
- chef de groupe ;
- occupant non à charge.
Et voici ma requête :
Elle ne fonctionne pas correctement, car si l'ordre du premier "groupe" est en ordre, ce n'est pas le cas des suivants.
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 occup.ID , loc.ID , ... INNER JOIN OCCUPATION AS occup ON occup.LOGEMENT_ID_FK = log.ID INNER JOIN OCCUPANT as loc ON occup.ID = loc.OCCUPATION_ID_FK WHERE occup.STATUT_OCCUPATION_ID_FK = 5 AND occup.DATE_FIN_BAIL IS NULL ORDER loc.PRENEUR_BAIL DESC , loc.CHEF_GROUPE ASC , loc.PERSONNE_A_CHARGE ASC , loc.RATTACHE_A ASC , loc.DATE_NAISSANCE ASC;
En effet, dans ceux-ci, les "occupants non à charge" sont placés avant le "chef de groupe".
Je n'en ai pas la certitude, mais je ne pense pas qu'il soit possible d'effectuer ce tri avec une seule jointure, mais je ne vois pas bien comment faire.
Pouvez-vous m'aider ?
Un grand merci d'avance.
Partager