Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    avril 2009
    Messages
    735
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : avril 2009
    Messages : 735
    Points : 433
    Points
    433

    Par défaut Obtenir un emploi du temps en une seule requête, possible ou pas ?

    bonjour,

    Actuellement pour obtenir un emploi du temps simplifié (en gros le nombre de mission par créneau d'heure) , je n'arrive pas à le faire en une requête, je dois passer par une boucle dans le language hôte (qui fait une requête par salarié (et comme j'ai 250 sal, ça fait 250 req....).
    bref j'arrive pas à optimiser. JE préfèrerai avoir tout en une seul requpete mais j'ai tourné le problème dans tous les sens je n'y arrive pas.

    au final, je veux (0 pour libre, 1 pour occupé) :

    créneau : 8 9 10

    marie : 0 1 0
    pierre : 1 0 2

    et ma table contient ça (personne, debut_mission,fin_mission):
    (marie,09:0,09:40)
    (pierre,08:00;08:59)
    (pierre,10:00,10:15)
    (pierre,10:30,10:40)

    avez-vous une idée qui m'éviterait une requête par personne ?
    Je préfèrerai une requête bourrin d'une seul coup plutôt que l'itération côté language host!

    merci à vous

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    avril 2009
    Messages
    735
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : avril 2009
    Messages : 735
    Points : 433
    Points
    433

    Par défaut

    bon finalement j'y suis arrivé !

    voiçi la requete de malade (pour 2 salariés et 4 créneaux) (résultats en pj)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT liste_employes,
    SUM(case when ('06:00:00' BETWEEN heure_debut::text AND heure_fin::text) OR ('06:59:59' BETWEEN heure_debut::text AND heure_fin::text) then 1 else 0 end) AS "6h",
    SUM(case when ('07:00:00' BETWEEN heure_debut::text AND heure_fin::text) OR ('07:59:59' BETWEEN heure_debut::text AND heure_fin::text) then 1 else 0 end) AS "7h",
    SUM(case when ('08:00:00' BETWEEN heure_debut::text AND heure_fin::text) OR ('08:59:59' BETWEEN heure_debut::text AND heure_fin::text) then 1 else 0 end) AS "8h",
    SUM(case when ('09:00:00' BETWEEN heure_debut::text AND heure_fin::text) OR ('09:59:59' BETWEEN heure_debut::text AND heure_fin::text) then 1 else 0 end) AS "9h"
      FROM calevent_item
    WHERE liste_employes LIKE '%,2910,%' OR liste_employes LIKE '%,1,%'
    GROUP BY liste_employes

    Je kiffe le sql !
    Images attachées Images attachées

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •