IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Sélection d'une ligne dans un INNER


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Sélection d'une ligne dans un INNER
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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]
    ...
    Nom : Lignes.png
Affichages : 96
Taille : 11,5 Ko

    Merci de votre aide !

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Utiliser des "min" sur les dates...
    Bon, la requête suivante semble donner les résultats attendus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
    	evenements.clef,
    	min(d.debut) as datesdebut,
    	min(d.fin) as datesfin,
    	(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
    GROUP BY evenements.clef
    Mais je ne sais pas si cela est très propre.
    Je vais tester...

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2007, 11h57
  2. Comment forcer la sélection d'une ligne dans un DataGridView
    Par Pizza Royale dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/06/2007, 12h32
  3. Sélection d'une ligne dans un DGGrid
    Par zarbouine dans le forum Delphi
    Réponses: 1
    Dernier message: 17/05/2007, 13h51
  4. Sélection d'une ligne dans un JTable
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 28/07/2004, 12h57
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo