Bonjour

J'ai un petit souci avec une vue.

J'ai une vue dans la quelle interviennent 3 tables.
Les logements
Les hebergements (qui correspondent a une disponibilité d'un logement pour une manifestation)
Les contacts (à qui appartiennent les logements).

Pour un logement donné, je peux avoir les situations suivantes
- je n'ai aucun hébergement
- j'ai 1 hébergement
- j'ai plusieurs hébergements

Ma vue fonctionne bien, elle me retourne le liste de tous logements, avec des doublons s'il y a plusieurs hébergements.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
create ALGORITHM = MERGE view logementvue as 
SELECT t1.id,t1.refpersonne , t1.nombre, t1.remarque, t1.etat, t1.type,t2.nom, t2.prenom, t2.adresse1, t2.adresse2, t2.adresse3, t2.cp, t2.ville, t2.telephone, t2.email, t4.refmanifestation , t4.id as refhebergement, t4.jeudi, t4.vendredi, t4.samedi, t4.dimanche, t4.lundi, t4.disponible
FROM logement AS t1
LEFT JOIN contactvue as t2 on t2.id=t1.refpersonne
LEFT JOIN hebergement AS t4 ON t4.reflogement = t1.id

En gros ca me retourne par exemple
logement1 MrX Manif1 disponible
logement2 MrX Manif1 disponible
logement1 MrX Manif2 disponible
logement3 MrX null null


Mon problème c'est que je voudrais pouvoir selectionner la liste des logements "eligibles" pour une manifestation sans être poluée par les autres manifestations.

C'est a dire que je voudrais qu'il me retourne, la liste des logements avec soit la partie hébergement renseignée si la manifestation correspond soit rien

par exemple sur le cas au dessus je voudrais récupérer si je me préocuppe de la manif2


logement2 MrX null null
logement1 MrX Manif2 disponible
logement3 MrX null null

Si je j'appelle ma vue avec une condition par exemple (refmanif=manif3 or refmanif=null)
je ne récupère que

logement1 MrX Manif2 disponible
logement3 MrX null null

Ce qui est logique car la condition est effectuée après les jointures.

Pour que ca marche il faudrait que ma conditions s'applique dans la jointure


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
create ALGORITHM = MERGE view logementvue as 
SELECT t1.id,t1.refpersonne , t1.nombre, t1.remarque, t1.etat, t1.type,t2.nom, t2.prenom, t2.adresse1, t2.adresse2, t2.adresse3, t2.cp, t2.ville, t2.telephone, t2.email, t4.refmanifestation , t4.id as refhebergement, t4.jeudi, t4.vendredi, t4.samedi, t4.dimanche, t4.lundi, t4.disponible
FROM logement AS t1
LEFT JOIN contactvue as t2 on t2.id=t1.refpersonne
LEFT JOIN hebergement AS t4 ON t4.reflogement = t1.id and refmanifestation=Manif2
Cette vue rend le resultat attendu.
Mais ca n'est pas la solution car j'ai besoin de pouvoir choisir la manifestation en fonction des besoins !

Merci d'avance de votre aide