Page 1 sur 1

Requete imbrique LEFT JOIN

Posté : 07 juin 2005, 18:47
par R3NL0N1M0
j'ai une table seances ( login_formateur, login_client, debut_seance, fin_seance ),
j'ai une table formateur ( login_formateur, nom_formateur, prenom_formateur, ... )

je veux les formateurs disponibles entre 10h00 et 11h00 aujourd'hui, donc j'ai fais une requete imbriqué :

SELECT login_formateur, nom_formateur, prenom_formateur FROM formateur WHERE login_formateur NOT IN (SELECT login_formateur FROM seances WHERE debut_seance < '2005-06-05 11:00:00' AND fin_seance > '2005-06-05 10:00:00' )
ici je recupère les login OQP , et du coup un SELECT NOT IN me donne les login libres

SAUF QUE SA MARCHE SUR MYSQL > 4.1 v voila mon probleme
j ai regardé les unions intersection création de table temp, left join, ETC
j ai pas trouvé alors je suis sure de passer a coté

Si quelqu'un pouvez m'eclairer ma lenterne bien sombre ... Merci

Posté : 07 juin 2005, 18:55
par albat
Pas testé, mais ça devrait pas être loin...

Code : Tout sélectionner

SELECT F.login_formateur, F.nom_formateur, F.prenom_formateur FROM formateur F LEFT JOIN seances S ON F.login_formateur = S.login_formateur WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' AND S.login_formateur IS NULL

Requete imbrique LEFT JOIN

Posté : 07 juin 2005, 21:06
par R3NL0N1M0
bin j'y est déjà pensé a sa!
Mais sa ne me renvoye rien du tout!
donc je suis toujours au mm point
merci kan mm

Requete imbrique LEFT JOIN

Posté : 07 juin 2005, 21:18
par R3NL0N1M0
Bon bin j'ai trouvé une solution mais je ne pense pas qu'elle soit bien:

j'utilise une table temporaire 'temp' dans laquelle je met le resultat des formateurs OQP ( SELECT login_formateur FROM seances S WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' )

Ensuite je fais un LEFT JOIN avec la table formateur:

SELECT F.login_formateur, F.nom_formateur, F.prenom_formateur FROM formateurs F LEFT JOIN temp ON F.login_formateur=temp.login_formateur WHERE temp.login_formateur Is Null;

Et j'obtiens les formateurs disponibles dans l'interval.
Fonctionnel mais pas otpimisé.
Alors si vous trouvez mieux merci!!

CIAO CIAO

une réponse peut-être ? !

Posté : 07 juin 2005, 21:54
par lnp
SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur f, seances s
WHERE f.login_formateur = s.login_formateur
AND s.debut_seance < '2005-06-05 11:00:00' AND s.fin_seance > '2005-06-05 10:00:00'

Je ne sais pas si cela fonctionne !

LNP...
pour vous...

Posté : 07 juin 2005, 22:04
par Cyrano
Ça ne répond pas à la question Inp, il cherche les formateurs disponibles dans cette tranche horaire, pas ceux qui sont en séance comme ta requête va retourner

Bref !

Posté : 08 juin 2005, 09:50
par Bak
Si tu sais retrouver facillement les formateurs non disponibles, tu peux faire 2 requettes impriquées :
Ex :
SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur
WHERE login_formateur Not In ( SELECT login_formateur FROM seances
WHERE s.debut_seance < '2005-06-05 11:00:00' AND s.fin_seance > '2005-06-05 10:00:00' )

Je ne sais pas si ça marche dans MYSQL !

Bon courage
Si t'as pas comprit le principe fait moi signe, les requettes imbriqués évitent de créer des tables temporaires!

Bref,
@+ Quoi !

Oups !!

Posté : 08 juin 2005, 09:55
par Bak
J'avais pas lu le début des messages echangés !
Désolé R3NL0N1M0, ça ne répond pas à ta question.

Bref, @+ Quoi !

Posté : 08 juin 2005, 09:57
par LNP
BAK : je croyais que RENLONIMO avait déjà essayé cette requête et qu'elle ne le satisfaisait pas ! ! !

LNP...
pour vous...

demi solution

Posté : 08 juin 2005, 17:25
par Bak
J'ai pas eu du temps pour me pencher sur ce sujet, mais je ne pense pas trouver une solution même en réfléchissant plus !!
Bref !

Je n'ai pas de solution pour une suppert requette !
Mais en tout cas tu peux ne pas utiliser de table temp (temporaire) en faisant une 1er requette : (SELECT distinct login_formateur FROM seances S WHERE S.debut_seance < '2005-06-05 11:00:00' AND S.fin_seance > '2005-06-05 10:00:00' ) mettre le résulta dans une variable du style :
...
Tanque pas fin d'enregistrement ...
strParam = strParam + ", " + enregitrement_en_cours
lire enregistrement suivant
Fin TQ

....

SELECT login_formateur, nom_formateur, prenom_formateur
FROM formateur
WHERE login_formateur Not In (" + strParam + ")"

.....


Faire attention a bien allimenté la variable strParam pour avoir un format corect pour une requette SQL !!

Bref, t'as compris le principe !!

@+ Quoi

pas mal !!

Posté : 08 juin 2005, 18:41
par R3NL0N1M0
Mi té koné pas si ... je ne savais pas que l'on pouvait faire ce genre requête, efffectivement cela peut être intéressant , puisque sa évite de créer une table temp et de la remplir a chaque fois!
Et étant donné que je n'ai pas une tonne de formateur, alors j'ai ma première requete qui me sort les formateurs OQP --> concaténation dans une variable et séparé par une ','.
Puis Select les formateurs NOT IN la variable!

j'ai pas testé en entier mais sa m'a l'air fonctionnel aussi!

Merci a tous