le 02/07/2009 à 15:20
Question MySQL - jointures externes
Hello,
Je m'essaie aux jointures externes depuis hier, de façon à simplifier mes requêtes. Simplifier dans le sens "ne faire qu'une requête" à la place dans faire plusieurs de suites.
Alors, j'expose un peu...
C'est une requête entre 5 tables.
users : table qui contient les noms des utilisateurs ainsi que l'id_group (qui correspond au groupe de la table groups)
opentask : table "lien" entre users et task
openpauses : table "lien" entre users et pauses
task : table qui contient les différentes tâches à effectuer
pauses : table qui contient les différentes pauses ( = horaires de travail du style 8h-15h, 15h-22h ...)
Pour l'instant, j'utilise la requête suivante :
Le principe, c'est d'afficher les noms des users qui ont une pause et/ou une tâche à effectuer à la date donnée. Donc, je veux pouvoir afficher les users qui ont, par exemple, une pause et une tâche, juste une tâche et juste une pause.
Ca fonctionne bien, mis à part le fait qu'il me donne les noms des users qui n'ont ni de tâche, ni de pause et j'aimerais pouvoir éviter ça.
J'avoue ne pas trop savoir comment faire. J'ai essayé de modifier ma requête en faisant tout ce qui me passait par la tête, mais soit il me donne tout, soit il ne me donne que les personnes qui ont à la fois des tâches et des pauses à effectuer.
Si quelqu'un comprend ma question (que j'ai du mal d'expliquer lol), est-ce qu'il voudrait jeter un oeil sur ma requête svp ?
Merci d'avance
Je m'essaie aux jointures externes depuis hier, de façon à simplifier mes requêtes. Simplifier dans le sens "ne faire qu'une requête" à la place dans faire plusieurs de suites.
Alors, j'expose un peu...
C'est une requête entre 5 tables.
users : table qui contient les noms des utilisateurs ainsi que l'id_group (qui correspond au groupe de la table groups)
opentask : table "lien" entre users et task
openpauses : table "lien" entre users et pauses
task : table qui contient les différentes tâches à effectuer
pauses : table qui contient les différentes pauses ( = horaires de travail du style 8h-15h, 15h-22h ...)
Pour l'instant, j'utilise la requête suivante :
SELECT u.id_users, u.name, u.surname, ot.id_task, op.id_pause, t.namefr, t.namenl, t.level, p.tag
FROM users u
LEFT OUTER JOIN opentask ot
ON u.id_users = ot.id_users AND '2009-06-29' BETWEEN ot.datestart AND ot.dateend
LEFT OUTER JOIN openpauses op
ON u.id_users = op.id_users AND '2009-06-29' BETWEEN op.datestart AND op.dateend
LEFT OUTER JOIN pauses p
ON op.id_pause = p.id_pause
LEFT OUTER JOIN task t
ON t.id_task = ot.id_task
WHERE u.id_groups = '2'
Le principe, c'est d'afficher les noms des users qui ont une pause et/ou une tâche à effectuer à la date donnée. Donc, je veux pouvoir afficher les users qui ont, par exemple, une pause et une tâche, juste une tâche et juste une pause.
Ca fonctionne bien, mis à part le fait qu'il me donne les noms des users qui n'ont ni de tâche, ni de pause et j'aimerais pouvoir éviter ça.
J'avoue ne pas trop savoir comment faire. J'ai essayé de modifier ma requête en faisant tout ce qui me passait par la tête, mais soit il me donne tout, soit il ne me donne que les personnes qui ont à la fois des tâches et des pauses à effectuer.
Si quelqu'un comprend ma question (que j'ai du mal d'expliquer lol), est-ce qu'il voudrait jeter un oeil sur ma requête svp ?
Merci d'avance