Rechercher dans une table des enregistrements qui n'ont pas d'enregistrements liés

Bonjour,

Dans une table j’effectue une recherche pour obtenir une liste de personnes correspondant à plusieurs critères :

	public void rechercherSeul(Map<String,String> params) {
		String dateN = params.get("dateNaissanceHabitant"); // YYYY-MM-DD HH:MM:SS
		String dateS = params.get("dateDebutSejour"); // YYYY-MM-DD HH:MM:SS
		this.resetFilters();

		this.getField("DomsecoBoHabitantStatutHabitant").setFilter("Actif");
		this.getField("DomsecoBoHabitantTypeResidence").setFilter("Secondaire");
		this.getField("DomsecoBoHabitantEtatCivil").setFilter("='Celibataire' or ='Divorce' or ='Veuf' or ='SepareDeFait' or ='PartenariatDeces' or ='SepareLegal' or ='PartenariatDissous' or ='PartenariatDissousInconnu' or ='PartenariatSeparationDeFait'");
		this.getField("DomsecoBoHabitantDateDebutSejour").setFilterDateMax(dateS);
		this.getField("DomsecoBoHabitantDateNaissance").setFilterDateMin(dateN);
		this.getField("DomsecoBoHabitantEtatDossier").setFilter("is null");
	}	

chaque personne est susceptible d’avoir des enregistrements liés, mais j’aimerai ajouter comme critère qu’il ne doit pas y avoir d’enregistrement lié

c’est possible?

Merci

Simplicité version4.0 patch level P25Built on2022-07-23 00:06 (revision b8e0951a1092464ec965f2b1cac8bf7c8b6b8501)

Bonjour Fabrice,

Oui pour chaque résultat de la recherche il faudra rechercher les enregistrements liés avec le row_id de la personne.
Mais je n’ai peut être pas bien compris votre besoin.

ça signifie que je ne peux pas le faire en une seule étape :

  1. j’obtiens une liste de personnes
  2. je dois parcourir chaque enregistrement pour savoir s’il y a des enreg liés

du coup n’est-ce pas mieux d’avoir un attribut dans ma table personne qui “compte” les enregistrements liés? je pense que ça me permettrait d’ajouter ce critère dans ma liste et de ne pas devoir parcourir chaque enregistrement trouvé… ce serait jouable?

Oui vous pouvez mais attention à la mise à jour de ces attributs.
Vous aurez à implémenter une mise à jour de ces attributs à chaque création, suppression des objets liés.
J’opterai pour une requête sql 'select count(*) … ’ pour chaque personne à l’étape 2.

Préférez également plutôt que des “or =”


getField("DomsecoBoHabitantEtatCivil").setFilter(" in ('Celibataire','Divorce','Veuf','SepareDeFait','PartenariatDeces' ,'SepareLegal','PartenariatDissous','PartenariatDissousInconnu','PartenariatSeparationDeFait')");

Merci pour les conseils. J’ai opté pour

  1. filtrer les personnes selon une série de critères
  2. je passe ensuite sur chaque enregistrement trouvé pour mettre à jour le nombre d’enregistrements liés
  3. j’ajoute le filtre pour ne garder que les enregistrements trouvés avec 0 enregistrement lié