Bonjour,
J'ai une table "evenement" et une table "dates" qui contient les champs "début", "fin" et "evenement" (clef étrangère sur le champ "clef" de la table "evenement").
Je souhaite afficher, ligne par ligne, chaque enregistrement de la table "evenement" avec un champ indiquant le première date de début trouvé supérieur à la date actuelle et un autre champ indiquant la date de fin correspondant à la ligne ou il y a la date de début trouvée dans la table "dates", ainsi qu'un champs indiquant les dates futures. Et ne pas afficher les dates passées.
Pour cela je fais la requête suivante:
1 2 3 4 5 6 7 8 9 10 11
| SELECT
evenements.clef,
d.debut as debut,
d.fin as fin,
(SELECT array_to_json(array_agg(t)) from ( select debut, fin from dates where evenement = evenements.clef and not current_timestamp > fin order by debut asc offset 1) t) as datesfutures
FROM evenements
INNER JOIN (SELECT evenement, debut, fin FROM dates WHERE NOT current_timestamp > dates.fin
--AND evenement = 93
ORDER BY dates.debut ASC
--LIMIT 1
) d ON d.evenement = evenements.clef |
Problème, elle m'affiche les lignes en double, pour y remédier je peux enlever les commentaires sur les deux lignes ou il y en a, la ça marche mais uniquement pour événement numéro 93 (logique).
Ce n'est pas grave que le champ "datesfutures" soit en json, si bien cette requête est faite pour être intégrée dans geoServer qui me fournira un geoJSON (je n'ai pas indiqué tous les champs présents dans mon exemple).
En remplaçant "93" par evenements.clef, j'ai l'erreur:
There is an entry for table "evenements", but it cannot be referenced from this part of the query.
Comment puis-je faire ? Je voudrais avoir un truc du genre:
1 2 3
| [evenement1][Date de debut la plus proche de la date actuelle mais non passée][date de fin][liste des dates futures]
[evenement2][Date de debut la plus proche de la date actuelle mais non passée][date de fin][liste des dates futures]
... |
Merci de votre aide !
Partager